android vision barcode-reader sampleの部分を使ってQRコードを読み取っています。ときどき(500人中2人のように)Firebaseクラッシュレポートを取得しています。これはCamera.openで発生します。Android Camera.openが失敗することがある
java.lang.RuntimeException:
at android.hardware.Camera.<init>(Camera.java:678)
at android.hardware.Camera.open(Camera.java:520)
at mobilevision.CameraSource.createCamera(CameraSource.java:0)
at <OR>.access$2200(CameraSource.java:0)
at mobilevision.CameraSource.release(CameraSource.java:0)
at <OR>.start(CameraSource.java:0)
at <OR>.getIdForRequestedCamera(CameraSource.java:0)
at <OR>.selectSizePair(CameraSource.java:0)
at <OR>.generateValidPreviewSizeList(CameraSource.java:0)
at <OR>.selectPreviewFpsRange(CameraSource.java:0)
at <OR>.setRotation(CameraSource.java:0)
at <OR>.createPreviewBuffer(CameraSource.java:0)
at <OR>.access$102(CameraSource.java:0)
at <OR>.access$202(CameraSource.java:0)
at <OR>.access$302(CameraSource.java:0)
at <OR>.access$502(CameraSource.java:0)
at <OR>.access$802(CameraSource.java:0)
at <OR>.access$1800(CameraSource.java:0)
at mobilevision.CameraSourcePreview.startIfReady(CameraSourcePreview.java:0)
at mobilevision.CameraSourcePreview.start(CameraSourcePreview.java:0)
at <OR>.start(CameraSourcePreview.java:0)
at <OR>.stop(CameraSourcePreview.java:0)
at <OR>.access$102(CameraSourcePreview.java:0)
at <OR>.access$200(CameraSourcePreview.java:0)
at mobilevision.CameraSourcePreview$SurfaceCallback.surfaceCreated(CameraSourcePreview.java:0)
at android.view.SurfaceView.updateWindow(SurfaceView.java:679)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:206)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2432)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1328)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6730)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:894)
at android.view.Choreographer.doCallbacks(Choreographer.java:696)
at android.view.Choreographer.doFrame(Choreographer.java:631)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:880)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.app.ActivityThread.main(ActivityThread.java:5765)
at java.lang.reflect.Method.invoke(Method.java:0)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)
例外がスローされ
コードの一部:
int requestedCameraId = getIdForRequestedCamera(mFacing);
if (requestedCameraId == -1) {
throw new Exception("Could not find requested camera.");
}
Camera camera = Camera.open(requestedCameraId);
私はそれがバーコードリーダーのサンプルで実装されているのと同様にカメラの許可を求めています。残念ながら、私はこの正確な例外を再現することができません。 しかし、カメラなしでエミュレータでアプリケーションを実行すると、同様の例外を再現することができました(どちらのカメラもnoneに設定されています)。しかし、この例外は実際のデバイスで発生するため、私は何が原因かと思っています。 クラッシュレポートに表示される電話機は、 Galaxy J1(2016)(j1x3g)A5.1、Plume P6 Pro LTE(PGN528)A6.0、3600i(CP3600I)、A6.0。
この例外を再現する方法のヒントを誰にでも教えていただけますか?許可が与えられてもカメラを起動できない理由を知っている人はいますか?
ありがとうございます!
ありがとうございます!私はすでにcheckPermissionを使用しており、APIレベル21,22,23についてこのエラーが発生しています。 APIレベル21では、ユーザーが権限を拒否できないか、何か不足しているため、いつでもカメラにアクセスできます。 – Iceman