Если пользователь отказал в разрешении, вы можете проверить разрешение, и если он также проверил, никогда не будет отображаться снова, в этом случае вы можете открыть свой собственный диалог, объясняющий необходимость этого разрешения для вашего приложения, и из этого диалогового окна вы может привести пользователя к настройкам приложения, где он может разрешить разрешение, если захочет.
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);
}
}
Если пользователь выберет шоу никогда, то он/она должна изменить в настройках только в противном случае мы можем применить код для проверки пользователя разрешения каждый раз достигает на этой деятельности –
Механизм такой же; Вы должны сохранить разрешение, которое было отклонено, и вы должны спросить с помощью того же метода. –
Когда вы выполняете какое-либо действие, которое требует ** РАЗРЕШЕНИЯ **, в это время вам необходимо проверить это разрешение, предоставленное пользователем, или нет. Если ** не ** в то время, вы должны снова запросить это разрешение. Пока пользователь не предоставит это разрешение, пользователь не сможет выполнить эту конкретную задачу. –