在Android 11及更高版本中,当应用程序请求权限并被用户拒绝时,使用以下代码示例来解决这个问题:
private static final int PERMISSION_REQUEST_CODE = 100;
private boolean checkPermission() {
int result = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
return result == PackageManager.PERMISSION_GRANTED;
}
private void requestPermission() {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
PERMISSION_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限已授予,可以执行需要权限的操作
} else {
// 权限被拒绝
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 如果用户选择了“拒绝并不再询问”,可以显示一个解释对话框,并引导用户手动打开应用设置页面以授予权限
} else {
// 用户选择了“拒绝并不再询问”,并且不再显示权限请求对话框,可以建议用户手动打开应用设置页面以授予权限
}
}
}
}
private void openAppSettings() {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", getPackageName(), null);
intent.setData(uri);
startActivityForResult(intent, PERMISSION_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PERMISSION_REQUEST_CODE) {
if (checkPermission()) {
// 用户已经授予所需的权限,可以执行需要权限的操作
} else {
// 用户仍然未授予所需的权限,可能需要采取其他措施
}
}
}
以上是一种处理Android 11及更高版本中权限请求被拒绝的解决方案,可以根据具体的业务需求进行调整和扩展。