2016-09-14 4 views
0

При использовании класса Camera2, я попал следующее исключение при вызове метода openCamera():Camera2 в openCamera() бросает SecurityException

W/System.err: java.lang.SecurityException 
W/System.err:  at android.os.BinderProxy.transactNative(Native Method) 
W/System.err:  at android.os.BinderProxy.transact(Binder.java:503) 
W/System.err:  at android.hardware.ICameraService$Stub$Proxy.connectDevice(ICameraService.java:364) 
W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
W/System.err:  at android.hardware.camera2.utils.Decorator.invoke(Decorator.java:80) 
W/System.err:  at java.lang.reflect.Proxy.invoke(Proxy.java:393) 
W/System.err:  at $Proxy0.connectDevice(Unknown Source) 
W/System.err:  at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:321) 
W/System.err:  at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:457) 
.... 

Ниже приведены мои явное содержание & код реализации.

Manifest.xml

<uses-permission android:name="android.permission.CAMERA"/> 
<uses-feature android:name="android.hardware.camera2" /> 
<application> 
// 
</application> 

код, чтобы открыть камеру:

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
     try { 
      String camIds[] = cameraManager.getCameraIdList(); 
      if (camIds.length > 0) { 
       cameraManager.openCamera(camIds[0], new CameraDevice.StateCallback() { 
        @Override 
        public void onOpened(CameraDevice cameraDevice) { 
         Log.d(TAG, "Camera opened"); 
        } 

        @Override 
        public void onDisconnected(CameraDevice cameraDevice) { 
         Log.d(TAG, "Camera disconnected"); 
        } 

        @Override 
        public void onError(CameraDevice cameraDevice, int i) { 
         Log.d(TAG, "Error access camera"); 
        } 
       }, null); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 

Код бросает исключение даже после свежей перезагрузки устройства.

Я нахожусь на Samsung Galaxy S6 и Android 6.0.1. Кто-нибудь указывает мне, что мне не хватает?

ответ

0

Ваш код должен быть:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) 
       != PackageManager.PERMISSION_GRANTED) { 
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION); 
} else { 
     try { 
      String camIds[] = cameraManager.getCameraIdList(); 
      if (camIds.length > 0) { 
       cameraManager.openCamera(camIds[0], new CameraDevice.StateCallback() { 
        @Override 
        public void onOpened(CameraDevice cameraDevice) { 
         Log.d(TAG, "Camera opened"); 
        } 

        @Override 
        public void onDisconnected(CameraDevice cameraDevice) { 
         Log.d(TAG, "Camera disconnected"); 
        } 

        @Override 
        public void onError(CameraDevice cameraDevice, int i) { 
         Log.d(TAG, "Error access camera"); 
        } 
       }, null); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
} 
+0

упс! Я позволяю Android Studio добавлять конструкции проверки безопасности, но забыл добавить запрос разрешения запроса. Инструмент не работает! В любом случае, спасибо за вашу помощь. – RyanB

Смежные вопросы