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