2016-11-16 48 views
0

Ich benutze Stoff als Fehler-Tracker und ich habe solche Fehler bekamWie löst man das SecurityException-Problem?

Fatal Exception: java.lang.SecurityException: Lacking privileges to access camera service 
    at android.hardware.camera2.utils.CameraBinderDecorator.throwOnError(CameraBinderDecorator.java:108) 
    at android.hardware.camera2.legacy.CameraDeviceUserShim.connectBinderShim(CameraDeviceUserShim.java:331) 
    at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:283) 
    at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:399) 
    at com.fittingroom.newtimezone.view.ActivityCamera.openCamera(ActivityCamera.java:498) 
    at com.fittingroom.newtimezone.view.ActivityCamera.access$000(ActivityCamera.java:73) 
    at com.fittingroom.newtimezone.view.ActivityCamera$1.onSurfaceTextureAvailable(ActivityCamera.java:120) 
    at android.view.TextureView.getHardwareLayer(TextureView.java:375) 
    at android.view.View.updateDisplayListIfDirty(View.java:14224) 
    at android.view.View.getDisplayList(View.java:14284) 
    at android.view.View.draw(View.java:15069) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3533) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3327) 
    at android.view.View.updateDisplayListIfDirty(View.java:14246) 
    at android.view.View.getDisplayList(View.java:14284) 
    at android.view.View.draw(View.java:15069) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3533) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3327) 
    at android.view.View.updateDisplayListIfDirty(View.java:14246) 
    at android.view.View.getDisplayList(View.java:14284) 
    at android.view.View.draw(View.java:15069) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3533) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3327) 
    at android.view.View.updateDisplayListIfDirty(View.java:14246) 
    at android.view.View.getDisplayList(View.java:14284) 
    at android.view.View.draw(View.java:15069) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3533) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3327) 
    at android.view.View.updateDisplayListIfDirty(View.java:14246) 
    at android.view.View.getDisplayList(View.java:14284) 
    at android.view.View.draw(View.java:15069) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3533) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3327) 
    at android.view.View.updateDisplayListIfDirty(View.java:14246) 
    at android.view.View.getDisplayList(View.java:14284) 
    at android.view.View.draw(View.java:15069) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3533) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3327) 
    at android.view.View.updateDisplayListIfDirty(View.java:14246) 
    at android.view.View.getDisplayList(View.java:14284) 
    at android.view.View.draw(View.java:15069) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3533) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3327) 
    at android.view.View.updateDisplayListIfDirty(View.java:14246) 
    at android.view.View.getDisplayList(View.java:14284) 
    at android.view.View.draw(View.java:15069) 
    at android.view.ViewGroup.drawChild(ViewGroup.java:3533) 
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3327) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchDraw(PhoneWindow.java:2700) 
    at android.view.View.draw(View.java:15376) 
    at android.widget.FrameLayout.draw(FrameLayout.java:652) 
    at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2679) 
    at android.view.View.updateDisplayListIfDirty(View.java:14254) 
    at android.view.View.getDisplayList(View.java:14284) 
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:272) 
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:278) 
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:317) 
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:2899) 
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2736) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2351) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1284) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6490) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:802) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:605) 
    at android.view.Choreographer.doFrame(Choreographer.java:574) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:788) 
    at android.os.Handler.handleCallback(Handler.java:815) 
    at android.os.Handler.dispatchMessage(Handler.java:104) 
    at android.os.Looper.loop(Looper.java:194) 
    at android.app.ActivityThread.main(ActivityThread.java:5546) 
    at java.lang.reflect.Method.invoke(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:967) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 

Soweit ich diesen Fehler auf die gleiche Benennung der Klasse im Zusammenhang verstanden, dass alredy reserviert Java ...

Aber wie um zu wissen, welchen Namen ich eingeben muss?

Vielen Dank im Voraus!

+1

von api 23 und höher Sie die Berechtigung zur Laufzeit –

+1

einen Blick auf https haben müssen : //developer.android.com/training/permissions/requesting.html –

+0

Es sagt nur, dass Sie Erlaubnis benötigen, Kameraaktionen durchzuführen. Ich nehme an, Sie wissen, wie Sie mit Berechtigungen umgehen – uguboz

Antwort

1

hier Klasse I erstellt und um Erlaubnis bitten

public class MarshMallowPermission { 

    public static final int RECORD_PERMISSION_REQUEST_CODE = 1; 
    public static final int WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 2; 
    public static final int READ_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 3; 
    public static final int CAMERA_PERMISSION_REQUEST_CODE = 4; 
    Activity activity; 

    public MarshMallowPermission(Activity activity) { 
     this.activity = activity; 
    } 

    public boolean checkPermissionForRecord(){ 
     int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO); 
     if (result == PackageManager.PERMISSION_GRANTED){ 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public boolean checkPermissionForWriteExternalStorage(){ 
     int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); 
     if (result == PackageManager.PERMISSION_GRANTED){ 
      return true; 
     } else { 
      return false; 
     } 
    } 
    public boolean checkPermissionForReadExternalStorage(){ 
     int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_EXTERNAL_STORAGE); 
     if (result == PackageManager.PERMISSION_GRANTED){ 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public boolean checkPermissionForCamera(){ 
     int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA); 
     if (result == PackageManager.PERMISSION_GRANTED){ 
      return true; 
     } else { 
      return false; 
     } 
    } 

    public void requestPermissionForRecord(){ 
     if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.RECORD_AUDIO)){ 
      Toast.makeText(activity, "Microphone permission needed for recording. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show(); 
     } else { 
      ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.RECORD_AUDIO},RECORD_PERMISSION_REQUEST_CODE); 
     } 
    } 

    public void requestPermissionForWriteExternalStorage(){ 
     if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)){ 
      Toast.makeText(activity, "External Storage permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show(); 
     } else { 
      ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE); 
     } 
    } 
    public void requestPermissionForReadExternalStorage(){ 
     if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.READ_EXTERNAL_STORAGE)){ 
      Toast.makeText(activity, "External Storage permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show(); 
     } else { 
      ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},READ_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE); 
     } 
    } 

    public void requestPermissionForCamera(){ 
     if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA)){ 
      Toast.makeText(activity, "Camera permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show(); 
     } else { 
      ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.CAMERA},CAMERA_PERMISSION_REQUEST_CODE); 
     } 
    } 
} 

zu überprüfen und wie Sie es verwenden, in Ihrer Aktivität

private void selectImage() { 
     final CharSequence[] items = {str_camera, str_image_lib, 
       str_cancel}; 

     AlertDialog.Builder builder = new AlertDialog.Builder(UploadActivityClaim.this); 
     builder.setTitle("Add Files!"); 
     builder.setItems(items, (dialog, item) -> { 
      if (items[item].equals(str_camera)) { 
       if (!marshMallowPermission.checkPermissionForCamera()) { 
        marshMallowPermission.requestPermissionForCamera(); 
        return; 
       } 
       dispatchTakePictureIntent(); 
      } else if (items[item].equals(str_image_lib)) { 
       if (!marshMallowPermission.checkPermissionForReadExternalStorage()) { 
        marshMallowPermission.requestPermissionForReadExternalStorage(); 
        return; 
       } 
       enableBrowseFile(); 
      } else if (items[item].equals(str_cancel)) { 
       dialog.dismiss(); 
      } 
     }); 
     builder.show(); 
    } 
Verwandte Themen