2017-05-04 6 views
4

Ich versuche, Camera2 API in meiner App zu verwenden, obwohl ich Laufzeitkamera-Berechtigung mit dem folgenden Code überprüfe.Android Kamera Laufzeitgenehmigung Fehler?

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; 
    } 
} 

Ich habe auch eine Berechtigung in der Datei AndroidManifest.xml enthalten.

Aber wenn ich meine App ausführen, wird der Erlaubnisdialog nicht angezeigt, aber Kamera wird nicht gewährt, Toast wird angezeigt.

1) Warum wird der Berechtigungsdialog nicht angezeigt?

2) Auch dort gibt es keinen Dialog, der zeigt, dass die Kamera kein Toast zeigt. Ich habe viel gesucht, aber nichts hilft!

Antwort

3

Hier ist die Arbeitslaufzeit Erlaubnis für Kamera 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

Mein Code, um Ihren Code ähnlich ist, aber das funktioniert nicht. – Yirga