我正在开发一个应用程序,其中编写内部存储的权限至关重要。当我请求api> 23的许可时,有一个选项可以永远不再显示请求权限对话框。我想禁用它,因为如果用户选择拒绝并且检查再也不显示请求对话框,那么用户将不得不亲自去设置并清除应用程序引用自己,我想避免。如果用户选择拒绝,我也想继续请求权限,但是在grantResults [0]中导致java.lang.ArrayIndexOutOfBoundsException错误。
总结我的问题: 1.如何禁用"再也不显示检查" 2.我的错误修复
如果用户选择拒绝,请在此处再次请求权限:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case PERMISSION_WRITE_EXTERNAL_STORAGE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Update();
} else {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_WRITE_EXTERNAL_STORAGE);
}
break;
}
}
答案 0 :(得分:2)
您无法阻止用户永久拒绝该权限。当用户执行需要该权限的操作并且权限被拒绝时,您可以闪烁消息 - 例如Toast或Snackbar。
答案 1 :(得分:1)
试试这个我的朋友
String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
int grant = ContextCompat.checkSelfPermission(this, permission);
if (grant != PackageManager.PERMISSION_GRANTED) {
String[] permission_list = new String[1];
permission_list[0] = permission;
ActivityCompat.requestPermissions(this, permission_list, 1);
}
@Override
public void onRequestPermissionsResult ( int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults){
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(AccountClass.this, "permission granted", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(AccountClass.this, "permission not granted", Toast.LENGTH_SHORT).show();
}
}
}