2016-06-13 5 views
0

Es ist eine sehr seltsame Situation. Ich arbeite mit camera2 API und es gibt eine normale Methode, um die Kamera zu öffnen.Wie wird die CAMERA-Berechtigung gesetzt, um den regulären Test zu bestehen?

manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler); 

diese Methode erfordert Test zu machen, das eine

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != 
      PackageManager. 
     return; 
    } 

es ist einfacher Test ableiten, wenn es CAMERA Erlaubnis in manifest oder nicht erklärt wurde.

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

ich habe diese Erlaubnis in meinem Manifest-Datei und wenn ich diese App Samsung S5 bin Hochladen ist es richtig funktioniert ohne Problem, aber wenn ich diese App chinesische Gerät am Hochladen Fehler ist geschehen. Übergeben Sie den Test nicht und öffnen Sie die Kamera eventuell nicht ...

Vielleicht sollte ich die Berechtigung dynamisch setzen?

Und noch eins, ich habe Call-Methode tryed die Kamera im Test, auf diese Weise

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != 
      PackageManager. 
     manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler); 
     return; 
    } 

aber bekommen diesen Fehler

FATAL AUSNAHME zu öffnen: Hauptprozess: com.example. android.camera2basic, PID: 29649 Thema: themes: {} java.lang.SecurityException: Es fehlen die Zugriffsrechte für den Kameradienst bei android.hardware.camera2.utils.CameraBinderDecorator.throwOnError (CameraBinderDecorator.java:108) unter android.hardware.camera2 .legacy.CameraDeviceUserShim.connectBinderShim (CameraDeviceUserShim.java:336) um android.hardware.camera2.CameraManager.openCameraDeviceUserAsync (CameraManager.java:327) unter android.hardware.camera2.CameraManager.openCamera (CameraManager.java:457) unter com.example.android.camera2basic.activities.CameraActivity.openCamera (CameraActivity. java: 919)

Was mache ich falsch?

Antwort

1

Auf API-Level 23+ müssen Sie zur Laufzeit Berechtigungen anfordern (auch wenn Sie sie in Ihrem Manifest deklariert haben).

Sie sollten etwas tun:

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

das Ergebnis, das Sie brauchen, um zu verarbeiten onRequestPermissionsResult() in Ihrem Activity außer Kraft zu setzen:

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == CAMERA_REQUEST) { 
     if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      // permission granted 
      // you can do your Camera related stuff 
     } else { 
      // permission denied 
     } 
    } 

    // ... 
} 

Überprüfen Sie die documentation auf Laufzeitberechtigungen aus.