我有一个相机权限按钮,在按钮点击监听器上我有 2 个主要的以下条件。 1:如果获得许可,只需转到相机 Activity ... 2:否则检查 2 个进一步的条件(1:我检查(使用 bool 变量)是否在对话框中选中“不再询问权限”然后转到设置....2:否则请求权限)。
在 onRequestPermissionsResult 方法中,我检查了用户是否授予权限然后转到相机 Activity ...否则检查用户是否选中“不再请求权限”设置为真 bool 变量否则显示权限被拒绝。
一切正常,但当我重新启动 Activity 时,它会将 bool 变量设置为 false(现在,如果用户上次可能已经检查了“不要再次请求许可”),它应该将用户带到设置但是第一次点击时不会,点击后(当 bool 变量设置为 true 时)它会起作用。 所以我的问题是如何在 onRequestPermissionsResult 方法中设置 bool 变量 final(因此它不会在 Activity 重启时改变)并在 onCreate 方法中使用它(超出范围)。
这里是 onCreate 中的按钮 onclick 监听器代码。
if (checkPermission())
{
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
// Toast.makeText(GalleryImageSelection.this,"CAMERA permission allows us to Access CAMERA app", Toast.LENGTH_LONG).show();
}
else {
if (test){ //test is that boolean variable
Uri packageUri = Uri.fromParts( "package", getApplicationContext().getPackageName(), null );
Intent intent = new Intent();
intent.setAction( Settings.ACTION_APPLICATION_DETAILS_SETTINGS );
intent.setData( packageUri );
intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK );
startActivity( intent );
}else {
ActivityCompat.requestPermissions(GalleryImageSelection.this,new String[]{
Manifest.permission.CAMERA}, RequestPermissionCode);
} }
这里是onRequestPermissionsResult方法代码
@Override
public void onRequestPermissionsResult(int RC, String per[], int[] PResult) {
switch (RC) {
case RequestPermissionCode:
if (PResult[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(GalleryImageSelection.this, "Permission Granted, Now your application can access CAMERA.", Toast.LENGTH_LONG).show();
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 7);
} else {
// for (int i = 0, len = per.length; i < len; i++) {
// String permission = per[i];
if (PResult[0] == PackageManager.PERMISSION_DENIED){
boolean showRational =shouldShowRequestPermissionRationale(per[0]);
if (!showRational){
test = true;//test is declared above onCreate for
//scope purpose
}
else if (CAMERA.equals(per[0])) {
Toast.makeText(GalleryImageSelection.this, "Permission Denied, your application cannot access CAMERA.", Toast.LENGTH_LONG).show();
}
}
}
break;
}
}
最佳答案
您可以使用 ActivityCompat#shouldShowRequestPermissionRational在 onRequestPermissionsResult 上
原始答案:Link
关于android - 方法中声明的最终静态 bool 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57800732/