gpt4 book ai didi

android - 如何为我的 Activity 授予屏幕覆盖权限

转载 作者:可可西里 更新时间:2023-11-01 19:05:48 27 4
gpt4 key购买 nike

在我的应用程序中,我在 android 6+ 中遇到屏幕覆盖问题我尝试打开但是为此我需要授予屏幕覆盖权限

我关注了this我无法融入我的 Activity

我也试过this似乎两者都有效,所以我想将它们整合到我的 Activity 中

这是我的 Activity :

public class MainActivity extends Activity {

public static final int R_PERM = 123;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

if ((CheckPermission(this, Manifest.permission.CAMERA)) &&
(CheckPermission(this, Manifest.permission.READ_PHONE_STATE)) &&
(CheckPermission(this, Manifest.permission.NFC))) {
PermHandling();
} else {
RequestPermission(MainActivity.this, Manifest.permission.CAMERA, R_PERM);
RequestPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE, R_PERM);
RequestPermission(MainActivity.this, Manifest.permission.NFC, R_PERM);

//NewPermHandling();
}

}

private void PermHandling() {
//My app internal parts....
//Here my stuff works...
}

//private void NewPermHandling(){

//}

@Override
public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {

switch (permsRequestCode) {

case R_PERM: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
PermHandling();
} else {
//Toast.makeText(this, "Please Grant Permissions other wise app will close.!", Toast.LENGTH_SHORT).show();
}
return;
}
}
}

public void RequestPermission(Activity thisActivity, String Permission, int Code) {
if (ContextCompat.checkSelfPermission(thisActivity,
Permission)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Permission)) {
} else {
ActivityCompat.requestPermissions(thisActivity,
new String[]{Permission},
Code);
}
}
}

public boolean CheckPermission(Context context, String Permission) {
if (ContextCompat.checkSelfPermission(context,
Permission) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
}

谁能建议我如何在我的 Activity 中授予屏幕方向权限这样用户就不需要给它或担心它请帮助在这里我试过了,但我不知道 PERM_REQUEST_CODE_DRAW_OVERLAYS

任何人请帮助我进行我的 Activity ,这不是重复的或我要问的其他问题如何将其添加到我的 Activity 中

最佳答案

以下是使用自定义覆盖禁用拉取通知的示例代码。它在 Android 版本以下和 6+ 上运行良好。

list 中所需的权限:

<uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" /> 
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

禁用拉取通知

private void disablePullNotificationTouch() {
try {
Log.v("App", "Disable Pull Notification");

private HUDView mView = new HUDView(this);
int statusBarHeight = (int) Math.ceil(25 * getResources().getDisplayMetrics().density);
Log.v("App", "" + statusBarHeight);

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
statusBarHeight,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, //Disables status bar
PixelFormat.TRANSPARENT); //Transparent

params.gravity = Gravity.CENTER | Gravity.TOP;
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);
} catch (Exception e) {
Log.v("App", "Exception: " + e.getMessage());

}
}

// code to post/handler request for permission
public final static int REQUEST_CODE = -1010101;

@RequiresApi(api = Build.VERSION_CODES.M)
public void checkDrawOverlayPermission() {
Log.v("App", "Package Name: " + getApplicationContext().getPackageName());

// check if we already have permission to draw over other apps
if (!Settings.canDrawOverlays(context)) {
Log.v("App", "Requesting Permission" + Settings.canDrawOverlays(context));
// if not construct intent to request permission
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getApplicationContext().getPackageName()));
/ request permission via start activity for result
startActivityForResult(intent, REQUEST_CODE);
} else {
Log.v("App", "We already have permission for it.");
disablePullNotificationTouch();
}
}
@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.v("App", "OnActivity Result.");
//check if received result code
// is equal our requested code for draw permission
if (requestCode == REQUEST_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.canDrawOverlays(this)) {
disablePullNotificationTouch();
}
}
}
}

修改后的代码

public class MainActivity extends Activity {

public static final int REQUEST_PERMISSION = 123;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.data);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Log.v("App", "Build Version Greater than or equal to M: " + Build.VERSION_CODES.M);
checkDrawOverlayPermission();
} else {
Log.v("App", "OS Version Less than M");
//No need for Permission as less then M OS.
}


if ((CheckPermission(this, Manifest.permission.CAMERA)) &&
(CheckPermission(this, Manifest.permission.READ_PHONE_STATE)) &&
(CheckPermission(this, Manifest.permission.NFC))) {
PermHandling();
} else {
RequestPermission(MainActivity.this, Manifest.permission.CAMERA, REQUEST_PERMISSION);
RequestPermission(MainActivity.this, Manifest.permission.READ_PHONE_STATE, REQUEST_PERMISSION);
RequestPermission(MainActivity.this, Manifest.permission.NFC, REQUEST_PERMISSION);

//NewPermHandling();
}

}

private void PermHandling() {
//My app internal parts....
//Here my stuff works...
}

//private void NewPermHandling(){

//}

@Override
public void onRequestPermissionsResult(int permissionRequestCode, String[] permissions, int[] grantResults) {
if (permissionRequestCode != REQUEST_PERMISSION) {
return;
}

if (grantResults.length && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
PermHandling();
} else {
// Ask the user to grant the permission
}
}

public void RequestPermission(Activity thisActivity, String Permission, int Code) {
if (ContextCompat.checkSelfPermission(thisActivity,
Permission) !=
PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
Permission)) {} else {
ActivityCompat.requestPermissions(thisActivity,
new String[] {
Permission
},
Code);
}
}
}

public final static int REQUEST_CODE = -1010101;

@RequiresApi(api = Build.VERSION_CODES.M)
public void checkDrawOverlayPermission() {
Log.v("App", "Package Name: " + getApplicationContext().getPackageName());

// Check if we already have permission to draw over other apps
if (!Settings.canDrawOverlays(context)) {
Log.v("App", "Requesting Permission" + Settings.canDrawOverlays(context));
// if not construct intent to request permission
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getApplicationContext().getPackageName()));
// request permission via start activity for result
startActivityForResult(intent, REQUEST_CODE); //It will call onActivityResult Function After you press Yes/No and go Back after giving permission
} else {
Log.v("App", "We already have permission for it.");
// disablePullNotificationTouch();
// Do your stuff, we got permission captain
}
}

@TargetApi(Build.VERSION_CODES.M)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.v("App", "OnActivity Result.");
//check if received result code
// is equal our requested code for draw permission
if (requestCode == REQUEST_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.canDrawOverlays(this)) {
// Permission Granted by Overlay
// Do your Stuff
}
}
}
}

public boolean CheckPermission(Context context, String Permission) {
if (ContextCompat.checkSelfPermission(context,
Permission) == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
return false;
}
}
}

startActivityForResult 将调用 onActivityResult 如果你从一个 Activity 而不是从服务调用它。了解更多信息 here

关于android - 如何为我的 Activity 授予屏幕覆盖权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40437721/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com