这是我在Android中询问运行时CAMERA权限的代码。我从我的onCreate()
拨打handleCameraPermission()
。Android运行时权限不起作用
当我第一次运行我的应用程序时,权限会自动启用。我去了设置并禁用了权限。但仍然checkIfPermissionEnabled()
返回true,但相机不启动。那么,checkIfPermissionEnabled()
有什么问题?
当我设置hasCameraPermission = false
并执行代码时,没有对话框,但摄像头权限已启用,一切都很好。
private boolean checkIfPermssionEnabled() {
int result = ContextCompat.checkSelfPermission(context, android.Manifest.permission.CAMERA);
if(result == PackageManager.PERMISSION_GRANTED)
return true;
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case CAMERA_PERMISSION_REQUEST:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//granted
hasCameraPermission = true;
} else {
//not granted
hasCameraPermission = false;
super.onBackPressed();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private void handleCameraPermission() {
int myVersion = Build.VERSION.SDK_INT;
if(myVersion >= Build.VERSION_CODES.M) {
hasCameraPermission = checkIfPermssionEnabled();
if(!hasCameraPermission) {
Log.d("cam","cam no permission");
//if(ActivityCompat.shouldShowRequestPermissionRationale(activity,android.Manifest.permission.CAMERA)) {
ActivityCompat.requestPermissions(activity,new String[]{android.Manifest.permission.CAMERA},CAMERA_PERMISSION_REQUEST);
Log.d("cam","cam dialog permission showed");
}
//else {
// ActivityCompat.requestPermissions(activity, new String[]{android.Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQUEST);
//}
} else
Log.d("cam","cam has permission");
} else
hasCameraPermission = true;
}
什么我想acheive是,如果没有启用摄像头权限,询问权限默认对话框会出现,我应该得到用户的输入回调即得到通知的用户按下拒绝或允许。
你是什么'targetSdkVersion'? –
compileSdk为23,minSdk为16,targetSdk为17 –
targetSdkVersion导致该问题。请参阅以下问题:http://stackoverflow.com/questions/33039188/checkselfpermission-returning-permission-granted-for-revoked-permission-with-tar –