這是我在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 –