Ich versuche, das neue Android camera2 api zu verwenden. Ich begann mit der Quelle aus diesem Tutorial: http://jylee-world.blogspot.com/2014/12/a-tutorial-of-androidhardwarecamera2.html. Wenn ich versuche, es auf einem beliebigen Telefon zu debuggen, bekomme ich eine SecurityException von CameraManager.openCamera(...)
.Android Camera2 API SecurityException
Mein AndroidManifest sieht wie folgt aus:
<uses-feature android:name="com.android.hardware.camera2.full"/>
<uses-permission android:name="android.permission.CAMERA"/>
Das, was jedes Tutorial zu sein scheint, ich habe in der Lage macht zu finden. Ich kann die Erlaubnis für andere Aktionen bekommen; Zum Beispiel kann ich die Kamera gut vibrieren lassen. Ich bin auch in der Lage, Kameras mit CameraManager.getCameraIdLists()
aufzuzählen, aber ich bin mir nicht sicher, ob das tatsächlich Erlaubnis erfordert. Aber ich kann nicht openCamera
.
Gibt es einige zusätzliche Berechtigungen, die ich brauche? Mache ich etwas falsch?
Danke für die Hilfe!
Das ist mein voller Stack-Trace:
SecurityException
java.lang.SecurityException: Lacking privileges to access camera serviceat android.hardware.camera2.utils.CameraBinderDecorator.throwOnError(CameraBinderDecorator.java:108)
at android.hardware.camera2.legacy.CameraDeviceUserShim.connectBinderShim(CameraDeviceUserShim.java:336)
at android.hardware.camera2.CameraManager.openCameraDeviceUserAsync(CameraManager.java:327)
at android.hardware.camera2.CameraManager.openCamera(CameraManager.java:457)
at com.example.quinnfreedman.camera2test.MainActivity$1.onSurfaceTextureAvailable(MainActivity.java:74)
at android.view.TextureView.getHardwareLayer(TextureView.java:368)
at android.view.View.updateDisplayListIfDirty(View.java:15167)
at android.view.View.draw(View.java:15964)
at android.view.ViewGroup.drawChild(ViewGroup.java:3612)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3402)
at android.view.View.updateDisplayListIfDirty(View.java:15185)
at android.view.View.draw(View.java:15964)
at android.view.ViewGroup.drawChild(ViewGroup.java:3612)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3402)
at android.view.View.updateDisplayListIfDirty(View.java:15185)
at android.view.View.draw(View.java:15964)
at android.view.ViewGroup.drawChild(ViewGroup.java:3612)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3402)
at android.view.View.updateDisplayListIfDirty(View.java:15185)
at android.view.View.draw(View.java:15964)
at android.view.ViewGroup.drawChild(ViewGroup.java:3612)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3402)
at android.view.View.draw(View.java:16197)
at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:2690)
at android.view.View.updateDisplayListIfDirty(View.java:15190)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2627)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2446)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2079)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1119)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6060)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Führen Sie die App auf Android 6? – Alex
@Alex Ja, ich habe es auf 6.1 laufen – B1CL0PS
Haben Sie um eine Erlaubnis gebeten? Wenn Sie die API 23 für Ihr App-Ziel benötigen, müssen Sie um Erlaubnis fragen. Oder zumindest für diesen Test müssen Sie zur Einstellung gehen und die Erlaubnis erteilen, wenn Sie gerade keine zusätzlichen Sachen implementieren wollen. Aber du musst später – Alex