2016-06-26 7 views
1

Ich habe ein wirklich großes Problem (Warum App keine Erlaubnis Camera2API sehen?

Ich bin mit Camera2API arbeiten und und ich für sie Standard-Google-Beispiel.

Mystic ist, wenn ich diese Methode

private void openCamera(int width, int height) { 
    setUpCameraOutputs(width, height); 

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

     } 

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

     manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler); 


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

I Samsung S6 android 6.0 verwenden

ich erwarte, dass Methode manager.openCamera(mCameraId, mStateCallback, mBackgroundHandler); - wird die Kamera öffnen, aber statt dessen, Code stoping in

soweit ich es verstehe, bedeutet dies, dass mein Manifest keine Berechtigung enthalten, aber ich überprüft, und es gibt eine entsprechende Erlaubnis

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

Was ist das?

Ich habe diese Erlaubnis, warum es die Prüfung nicht besteht?

ich diese App auf Meizu MX5 android 5.1 versucht starten und es öffnet sich die Kamera und alles ist in Ordnung ...

Vielleicht ist das Problem in androind Version?

Was mache ich falsch? Wie kann ich es überprüfen?

+0

Wenn Sie Ziel sind, ist Api 23, die Sie haben, überprüfen Sie Laufzeit Berechtigung .. Werfen Sie einen Blick auf dieses Beispiel https://github.com/googlesamples/android-RuntimePermissions –

Antwort

1

Sie sagten, Sie verwenden Android 6.0 richtig?
Gemäß this müssen Sie, selbst wenn Sie die Berechtigungen im Manifest deklarieren, einzeln für jede Berechtigung prüfen und jede Berechtigung anfordern, wenn sie nicht erteilt wurde.
Um dies zu tun, nach:

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

Statt return, dies zu tun,

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

und die Callback-Funktion implementieren, wie in der gelinkten Seite beschrieben,

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case YOUR_INTEGER_CONSTANT_FOR_THE_CALLBACK: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
       Log.d(TAG,"Granted"); 
       // permission was granted, yay! Do the 
       // contacts-related task you need to do. 

      } else { 
       Log.d(TAG,"Denied"); 
       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 

Hoffnung, dass hilft.

0

In Ihrem Samsung gehen Sie zu: Einstellungen -> Apps -> "Ihre App" -> Berechtigungen; und legen Sie die Berechtigungen manuell fest. Dies geschieht, wenn Ihre Ziel-API 23 und höher ist. Bei niedrigeren Versionen läuft es einwandfrei. Wenn Sie möchten, dass Ihre App automatisch Berechtigungen für Android 6.0 und höher erhält, ändern Sie in Ihrer gradle die Ziel-API auf 22. Auch wäre es besser, in Ihrer App um Berechtigungen zu bitten.