Credntia / MVBarcodeReader

A Barcode scanner library for Android. Uses the Google Play Services' mobile vision api for barcode detection.
Apache License 2.0
68 stars 22 forks source link

Crash when device as only a front camera #6

Closed NitroG42 closed 7 years ago

NitroG42 commented 7 years ago

Fatal Exception: java.lang.RuntimeException: Could not find requested camera. at devliving.online.mvbarcodereader.camera.CameraSource.createCamera(CameraSource.java:736) at devliving.online.mvbarcodereader.camera.CameraSource.start(CameraSource.java:362) at devliving.online.mvbarcodereader.camera.CameraSourcePreview.startIfReady(CameraSourcePreview.java:90) at devliving.online.mvbarcodereader.camera.CameraSourcePreview.access$102(CameraSourcePreview.java:32) at devliving.online.mvbarcodereader.camera.CameraSourcePreview$SurfaceCallback.surfaceCreated(CameraSourcePreview.java:113) at android.view.SurfaceView.updateWindow(SurfaceView.java:580) at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:176) at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2020) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5971) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5258) 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:970) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:765)

Here is the relevant code from BarcodeFragment:

        CameraSource.Builder builder = new CameraSource.Builder(getActivity().getApplicationContext(), barcodeDetector)
                .setFacing(CameraSource.CAMERA_FACING_BACK)
.setRequestedFps(15.0f);

It should check if there is a camera + if there is only a front one (to use FACING_FRONT)

Here is the code to check : http://stackoverflow.com/questions/26107696/android-java-detect-if-device-has-a-back-camera

NitroG42 commented 7 years ago

I tried on a emulator with only a front faced camera (it crashed on the previous version), the fix is working. Thanks !