2015-12-10 67 views
4

我正在開發使用Camera2 API應用程序缺乏權限。我的問題看起來像這樣: 時,我打了設備的睡眠按鈕時,相機片段的工作之後,我醒來的設備,應用程序重新啓動的Android Camera2 API - 在恢復

12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime: FATAL EXCEPTION: main 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime: Process: com.snapsportz.nexus5camera.app, PID: 5081 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime: java.lang.RuntimeException: Unable to pause activity {com.snapsportz.nexus5camera.app/com.snapsportz.handheldcamera.app.CameraActivity}: java.lang.SecurityException: Lacking privileges to access camera service 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3381) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3340) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4047) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.-wrap15(ActivityThread.java) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime: Caused by: java.lang.SecurityException: Lacking privileges to access camera service 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.hardware.camera2.utils.CameraBinderDecorator.throwOnError(CameraBinderDecorator.java:108) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.hardware.camera2.utils.CameraBinderDecorator$CameraBinderDecoratorListener.onAfterInvocation(CameraBinderDecorator.java:73) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.hardware.camera2.utils.Decorator.invoke(Decorator.java:81) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at java.lang.reflect.Proxy.invoke(Proxy.java:393) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at $Proxy1.cancelRequest(Unknown Source) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.hardware.camera2.impl.CameraDeviceImpl.stopRepeating(CameraDeviceImpl.java:899) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.hardware.camera2.impl.CameraCaptureSessionImpl.close(CameraCaptureSessionImpl.java:373) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at com.snapsportz.handheldcamera.app.Camera2BasicFragment.closeCamera(Camera2BasicFragment.java:899) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at com.snapsportz.handheldcamera.app.Camera2BasicFragment.onPause(Camera2BasicFragment.java:771) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.Fragment.performPause(Fragment.java:2379) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1019) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1130) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.FragmentManagerImpl.dispatchPause(FragmentManager.java:1967) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.FragmentController.dispatchPause(FragmentController.java:185) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.Activity.performPause(Activity.java:6346) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1311) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3367) 
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3340)  
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4047)  
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.-wrap15(ActivityThread.java)  
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)  
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102)  
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148)  
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417)  
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method)  
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
12-10 10:59:10.423 5081-5081/com.snapsportz.nexus5camera.app E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

我認爲,這不是一個缺乏攝像頭權限清單文件,因爲它包含在裏面,除非我試圖喚醒它,否則應用程序工作正常。

我會爲任何一絲真的很高興。

+0

你有兩個? ? – Fustigador

+0

是的,我已經得到了他們兩個 – sliwkacz

+0

可以請你添加一些更詳細/相關代碼。你瞄準什麼sdk? –

回答

2

如果使用的是谷歌Camera2Basic示例應用程序 - issue #42似乎說明問題。解決的辦法是查看您onResume方法的使用在你Fragment - 並呼籲closeCamera()您在onResume()調用openCamera()之前。似乎解決了我的測試Camera2Basic中的問題。

1

通常情況下,這是因爲你沒有停止攝像設備。 我的onPause解決了這個/活動的onResume重寫方法:

@Override 
protected void onResume() { 
    super.onResume(); 
    Log.e(TAG, "onResume"); 
    ... 
    openCamera(); 
    ... 
} 
@Override 
protected void onPause() { 
    Log.e(TAG, "onPause"); 
    closeCamera(); 
    super.onPause(); 
} 

這爲我工作。

Regards.-