检测到Android请求权限系统覆盖

时间:2017-03-14 05:18:43

标签: android overlay android-permissions application-settings runtime-permissions

我遇到了问题。当用户成功提供所有必需的权限时,不会发生这种情况。当用户拒绝许可时,就会发生这种情况。我向用户显示一个对话框,以启用 Apps-> AppName->设置的权限。我把用户带到那里。但是当用户尝试启用任何权限时,它会显示该消息。检测到系统覆盖,并且不允许用户启用任何权限。我搜索了谷歌和Stackoverflow很多,但没有找到任何解决方案。有些人通过禁用吐司解决了解决方案,但我没有露出任何祝酒词。

注意:只有在拒绝任何权限时才会出现此问题。

这是我的代码

private void showPermissionDialog(String message, final int permissionCode){
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Permission Required");

    if(permissionCode == Constants.REQ_CODE_PERMISSION_SYSTEM_OVERLAY_WINDOW) {
        builder.setMessage(Constants.getOverlayNotEnabledMessage(Constants.getInstance(this)));
    } else {
        builder.setMessage(message + " To enable go to apps, Select " +
                getResources().getString(R.string.app_name) + " Enable permissions now?");
    }

    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            dialogInterface.dismiss();
            if(permissionCode == Constants.REQ_CODE_PERMISSION_READ_CONTACTS){
                MainActivity.this.finish();
            }
        }
    });
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

            if(permissionCode == Constants.REQ_CODE_PERMISSION_SYSTEM_OVERLAY_WINDOW) {
                requestOverlayPermissions();
            } else {
                Intent intent = new Intent();
                intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", getApplicationContext().getPackageName(), null);
                intent.setData(uri);
                MainActivity.this.startActivityForResult(intent, permissionCode);
            }
        }
    });
    AlertDialog alertDialog = builder.create();
    alertDialog.setCancelable(false);
    alertDialog.show();
}

1 个答案:

答案 0 :(得分:0)

在android M中,没有解决此问题的方法。如果您的应用程序需要SYSTEM_OVERLAY_WINDOW权限,则无法启用或禁用“设置”中的权限。唯一的解决方案(开发人员方面没有解决方案)是清晰的应用数据,这将再次请求权限