2016-11-16 139 views
0

我用面料爲錯誤跟蹤器和我有這樣的錯誤如何解決SecurityException問題?

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) 

據我瞭解這個錯誤涉及到類相同的命名是java的已alredy保留...

但如何知道哪個名字我必須堅持?

在此先感謝!

+1

從API 23內並在運行時 –

+1

更高,你需要許可看一看HTTPS ://developer.android.com/training/permissions/requesting.html –

+0

它只說你需要許可執行相機操作。我假設你知道如何處理權限 – uguboz

回答

1

這裏I類創建檢查,並要求允許

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

以及如何使用它你的活動

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