0

这是我在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是,如果没有启用摄像头权限,询问权限默认对话框会出现,我应该得到用户的输入回调即得到通知的用户按下拒绝或允许。

+0

你是什么'targetSdkVersion'? –

+0

compileSdk为23,minSdk为16,targetSdk为17 –

+0

targetSdkVersion导致该问题。请参阅以下问题:http://stackoverflow.com/questions/33039188/checkselfpermission-returning-permission-granted-for-revoked-permission-with-tar –

回答

0

你忘了问权限,以这样的方式

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, YOUR_REQUEST_CODE); 
+0

它在那里。请检查if(!hasCameraPermission)块。 –

+0

删除布尔hasCameraPermission并尝试始终使用checkIfPermssionEnabled()方法。 – WorieN