这是由于Android 11中的新安全特性引起的。如果您要在应用程序中使用弹出窗口,则必须请求“SYSTEM_ALERT_WINDOW”权限。以下是代码示例:
1.在AndroidManifest.xml中添加以下权限请求:
2.检查应用程序是否具有SYSTEM_ALERT_WINDOW权限:
if(Settings.canDrawOverlays(this)){ //有SYSTEM_ALERT_WINDOW }else{ //没有SYSTEM_ALERT_WINDOW, 跳转打开权限申请 setting 页面 Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); startActivity(intent); }
注意:必须实现 onActivityResult() 方法以便在用户完成设置之后检查他们是否授予了SYSTEM_ALERT_WINDOW权限。
公共方法:
public static void checkDisplayPermission(Activity activity, int requestCode){ if (Build.VERSION.SDK_INT >= 23 && !Settings.canDrawOverlays(activity)) { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + activity.getPackageName())); activity.startActivityForResult(intent, requestCode); } }
公共方法中的activity是您正在跳转的Activity, requestCode是permissionRequestId。
调用此方法:
checkDisplayPermission(MainActivity.this, permissionRequestId);
这时系统弹出权限申请对话框,用户在对话框中打开权限。
在onActivityResult()方法中再次检查权限:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == permissionRequestId) { if (Build.VERSION.SDK_INT >= 23 && Settings.canDrawOverlays(this)) { //有SYSTEM_ALERT_WINDOW } else { //没有SYSTEM_ALERT_WINDOW } } }
这样,就可以在Android 11上正确处理弹出窗口权限请求。
上一篇:Android11中相机意图操作不能正常工作以下是我的代码,我只能接收到缩略图如何接收到完整尺寸的图像?
下一篇:Android11中有没有一种在不使用MANAGE_EXTERNAL_STORAGE的情况下打开具有特定应用程序扩展名的文件的方法?