在 Android 13 和 targetSdkVersion=33 上,Android 系统会对权限请求对话框进行更改,以便让用户更好地了解应用程序为何需要权限。由于此更改,请求权限时可能无法显示弹出窗口。解决此问题的方法是使用 shouldShowRequestPermissionRationale() 方法,以提示用户需要权限并显示对话框。
以下是一个使用 shouldShowRequestPermissionRationale() 方法解决此问题的示例代码:
private static final int PERMISSIONS_REQUEST_CODE = 100;
if (ContextCompat.checkSelfPermission(MainActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,
Manifest.permission.READ_EXTERNAL_STORAGE)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
new AlertDialog.Builder(MainActivity.this)
.setTitle("Permission needed")
.setMessage("This permission is needed for accessing your files")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// continue with request
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSIONS_REQUEST_CODE);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// close dialog
dialog.cancel();
}
})
.create()
.show();
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSIONS_REQUEST_CODE);
}
}
在此示例中,如果我们的应用程序没有被授予读取外部存储权限,则会检查 shouldShowRequestPermissionRationale() 以查看是否需要显示有关权限请求的说明。如果需要,我们将显示 AlertDialog 来显示说明。如果用户
上一篇:android::uirenderer::RenderNode::prepareTree异常
下一篇:Android:Activityrotationisdonebutorientationatconfigurationisnotchanged