2017-05-04 5 views
4

次のコードを使用してランタイムカメラのアクセス許可をチェックしていても、私のアプリケーションでCamera2 apiを使用しようとしています。Androidのカメラランタイムの権限エラーですか?

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { 
       cameraManager.openCamera(cameraId, stateCallBack, null); 

      } else { 
       if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) 
        Toast.makeText(getApplicationContext(), "PLease allow the app to use camera app", Toast.LENGTH_LONG).show(); 

      } 
      ActivityCompat.requestPermissions(CaptureImageActivity.this,new String[]{"android.manifest.permissin.CAMERA"}, CAMERA_REQUEST_RESULT); 

     } else { 
      cameraManager.openCamera(cameraId, stateCallBack, null); 
     } 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permission, int[] grantResult) { 

    switch (requestCode) { 

     case CAMERA_REQUEST_RESULT: 
      if (grantResult[0] == PackageManager.PERMISSION_GRANTED) { 

       try { 
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
         //this method is created because of openCamera method below i don't understand why this method is created 
         return; 
        } 
        cameraManager.openCamera(cameraId, stateCallBack, null); 
       } catch (CameraAccessException e) { 
        e.printStackTrace(); 
       } 
      } 
      if (grantResult[0] != PackageManager.PERMISSION_GRANTED) 
       Toast.makeText(getApplicationContext(), "camera is not granted", Toast.LENGTH_LONG).show(); 


      break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permission, grantResult); 
      break; 
    } 
} 

また、AndroidManifest.xmlファイルには許可が含まれています。

<uses-permission android:name="android.permission.CAMERA" /> 

私のアプリを実行すると、許可ダイアログは表示されませんが、カメラはトーストが表示されていません。

1)なぜ許可ダイアログが表示されないのですか?

2)表示されているダイアログが表示されない場合、どのようにカメラにトーストが表示されますか?私は多くを検索しましたが、何も助けません!ここで

答えて

3

カメラAPIの作業のランタイム許可

private static final int PERMISSIONS_REQUEST_CAPTURE_IMAGE = 1; 
if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.CAMERA) 
      != PackageManager.PERMISSION_GRANTED) { 
     // User may have declined earlier, ask Android if we should show him a reason 

     if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { 
      // show an explanation to the user 
      // Good practise: don't block thread after the user sees the explanation, try again to request the permission. 
     } else { 
      // request the permission. 
      // CALLBACK_NUMBER is a integer constants 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSIONS_REQUEST_CAPTURE_IMAGE); 
      // The callback method gets the result of the request. 
     } 
    } else { 


    } 
@Override 
    public void onRequestPermissionsResult (int requestCode, String[] permissions, 
    int[] grantResults){ 
     switch (requestCode) { 
      case PERMISSIONS_REQUEST_CAPTURE_IMAGE: { 
       if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        // permission was granted 

        Log.d("", "permission granted success"); 


       } else { 
        // permission denied 

        Log.d("", "permission denied"); 
       } 
       return; 
      } 
     } 
    } 
+0

は私のコードは、あなたのコードに似ているが、これは動作しませんです。 – Yirga