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하려고 내가 즉 사용자의 입력에 대한 콜백을 얻어야한다, 사용자 거부 또는 허용을 누를 때 알림을 받으려면 .

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, YOUR_REQUEST_CODE); 
+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

당신은 이런 식으로 권한을 물어 잊으 셨나요?
+0

거기에 있습니다. if (! hasCameraPermission) 블록을 확인하십시오. –

+0

boolean hasCameraPermission을 삭제하고 checkIfPermssionEnabled() 메소드를 항상 사용하십시오. – WorieN