如何让用户有机会在App中更改其权限, 他已经设定授予/拒绝?
让我们说用户拒绝了许可。后来他希望获得此许可。 可能吗?我怎么能这样做?
答案 0 :(得分:3)
如果用户拒绝了权限,您可以检查权限,如果他也检查过再也不显示,那么您可以打开自己的对话框,说明您的应用程序需要该权限,并且您可以从该对话框中将用户带到应用程序设置,如果他愿意,他可以允许许可。
public static void checkPermissionForExternalStorage(final Context mContext) {
if (Build.VERSION.SDK_INT >= 23) {
int writeExternalStorage = ContextCompat.checkSelfPermission(mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (writeExternalStorage != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_ASK_PERMISSIONS_FOR_STORAGE);
return;
}
//Do your stuff
} else {
//Do your stuff
}
}
public static void startInstalledAppDetailsActivity(Context mContext) {
Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + mContext.getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
mContext.startActivity(i);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS_FOR_STORAGE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//Do your stuff
} else {
// Permission Denied
if (!ActivityCompat.shouldShowRequestPermissionRationale((Activity) mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
showMessageOKCancel("The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission. Tap Settings > Permissions, and turn Storage on.",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startInstalledAppDetailsActivity((Activity) mContext);
}
});
}
Toast.makeText( mContext, "Write to external storage permission request denied.", Toast.LENGTH_SHORT).show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
答案 1 :(得分:1)
您向用户显示一个对话框,要求转到应用程序设置并更改其中的权限,您必须以某种方式激励他,告诉您为何需要该权限。并且你设置了一个“打开设置”按钮,它会触发以下功能:
private void startInstalledAppDetailsActivity() {
final Intent i = new Intent();
i.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
i.addCategory(Intent.CATEGORY_DEFAULT);
i.setData(Uri.parse("package:" + getPackageName()));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(i);
}
答案 2 :(得分:1)
有多种方法可以实现您的目标:
您可以为此目的创建单独的视图/片段,以获取您的应用所需的所有权限,然后您可以调用requestPermission()
。
或者,只要用户通过调用requestPermission()
打开需要运行权限的应用细分,您就可以提示用户获取权限。
用户还可以从Settings
向该应用授予权限。因此,如果他希望Settings
愿意,可以指导用户(例如通过对话框)稍后更改权限。
答案 3 :(得分:0)
是的,你可以这样做。
如果onRequestPermissionsResult
您知道用户是否已授予权限,则会有回调。如果用户未授予权限,您可以在需要时再次请求相同的权限。