2017-05-04 3 views
0

Ich versuche, die Kamera zu öffnen, aber der Fehler schließt die Anwendung. Gestern hat der Code gearbeitet, aus irgendeinem Grund jetzt ist es nichtFehlende Berechtigungen erforderlich für CameraManager.openCamera: android.permission.CAMERA

private void connect() auf dem physischen Telefon arbeiten {

CameraManager cameraManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); 
    try { 
     if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) { 
      throw new RuntimeException("Time out waiting to lock camera opening."); 
     } 

     int permissionCheck = ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA); 

     if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 

      ActivityCompat.requestPermissions((Activity)context, PERMISSIONS, PERMISSION_ALL); 
      //java.lang.SecurityException: Lacking privileges to access camera service 
     } 

     cameraManager.openCamera("0", mCameraDeviceStateCallback,null); 

    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     throw new RuntimeException("Interrupted while trying to lock camera opening.", e); 
    } 
} 

java.lang.SecurityException: Lacking privileges to access camera service

Antwort

0

Das Problem ist, dass ActivityCompat.requestPermissions(...) ist nicht blockierend, also eigentlich, was passiert, ist Ihre App-Anfragen Erlaubnis aber bevor der Benutzer es (oder auch der Dialog angezeigt werden könnte) gewähren könnte, die cameraManager.openCamera(...) Linie ausgeführt wird , die offensichtlich eine Ausnahme auslöst, wenn die Erlaubnis nicht vorher erteilt wurde. Dies bedeutet, dass Sie Ihre Operationen hier verzweigen haben:

  • , wenn Sie die Berechtigung erteilt haben, führen cameraManager.openCamera(...)
  • wenn Sie nicht haben tun die Erlaubnis erteilt, rufen ActivityCompat.requestPermissions(...) und warten auf die Ergebnisse in onRequestPermissionsResult(...)

Wenn Sie die Ergebnisse (und die Erlaubnis erteilt wurde), können Sie die Kamera öffnen:

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] results) { 
    switch (requestCode) { 
     case PERMISSION_ALL: 
      if (results.length > 0 && results[0] == PackageManager.PERMISSION_GRANTED) { 
       // permission granted 
       cameraManager.openCamera("0", mCameraDeviceStateCallback,null); 
      } else { 
       // permission denied 
      } 

      return; 
    } 
} 

Vergessen Sie auch nicht zu, diese Erlaubnis in Ihrer Manifest-Datei zu setzen, wenn Ihre minSdkVersion weniger als 23

Check out Requesting Permissions at Run Time für weitere Details.

Verwandte Themen