如何检测用户是否在android中的设置中禁用了授予的权限?

问题描述 投票:0回答:1

在Android 6.0及更高版本中,在运行时授予的权限和用户可以通过转到设置来取消授予的权限。

我想在用户通过转到设置取消授予的权限后立即运行一些代码。无论如何要做到这一点?

android android-permissions
1个回答
0
投票

//在调用其他Activity或函数之前调用它来检查权限

if (hasPermission()) {
// do thing

} else {
requestPermissionDialog();
}

/////////////////调用hasPermission ////////////////////////////

private boolean hasPermission() {
boolean permission = true;
if (ActivityCompat.checkSelfPermission(WelcomeActivity.this, 
Manifest.permission.WRITE_EXTERNAL_STORAGE) != 
PackageManager.PERMISSION_GRANTED) {
permission = false;
}
return permission;
}

////////////////////////// requestPermissions Dialog ////////////////////// /

private void requestPermissionDialog() {

    permissionStatus = getSharedPreferences("permissionStatus", MODE_PRIVATE);


    if (ActivityCompat.checkSelfPermission(WelcomeActivity.this, Manifest.permission.WRITE_Eenter code hereXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
        if (ActivityCompat.shouldShowRequestPermissionRationale(WelcomeActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            //Show Information about why you need the permission
            //  resetPasswordDialog(WelcomeActivity.this,"ok");

            AlertDialog.Builder builder = new AlertDialog.Builder(WelcomeActivity.this);
            builder.setInverseBackgroundForced(true);
            builder.setTitle("Storage Permission");

            builder.setMessage("This app needs Storage permission.");
            builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    ActivityCompat.requestPermissions(WelcomeActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_STORAGE_PERMISSION_CONSTANT);
                }
            });
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            builder.show();
        } else if (permissionStatus.getBoolean(Manifest.permission.WRITE_EXTERNAL_STORAGE, false)) {
            //Previously Permission Request was cancelled with 'Dont Ask Again',
            // Redirect to Settings after showing Information about why you need the permission


            // resetPasswordDialog(WelcomeActivity.this,"settings");
            AlertDialog.Builder builder = new AlertDialog.Builder(WelcomeActivity.this);
            builder.setInverseBackgroundForced(true);

            builder.setTitle(" Storage Permission");
            builder.setMessage("This app needs Storage permission.");
            builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    sentToSettings = true;
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
                    Toast.makeText(getBaseContext(), "Go to Permissions to allow Storage Audio ", Toast.LENGTH_LONG).show();
                }
            });
            builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            builder.show();
        } else {
            //just request the permission
            ActivityCompat.requestPermissions(WelcomeActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, EXTERNAL_STORAGE_PERMISSION_CONSTANT);
        }

        SharedPreferences.Editor editor = permissionStatus.edit();
        editor.putBoolean(Manifest.permission.WRITE_EXTERNAL_STORAGE, true);
        editor.commit();

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.