某些设备上 android.media.Image.getPlanes() 上的 Camera2 API 异常

时间:2021-05-28 07:07:08

标签: java android android-camera2

我使用 Camera2 API 在我的应用程序中捕获 OCR 图像(仅限平板电脑)。一切正常,但有一个设备(比如 A 设备)没有工作。这里的日志:

2021-05-28 13:46:23.402 28882-28937/com. D/OpenGLRenderer: textureCacheSize 75497472
2021-05-28 13:46:23.416 28882-28882/com. I/CameraManagerGlobal: Connecting to camera service
2021-05-28 13:46:33.303 28882-28975/com. W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'android.media.Image$Plane[] android.media.Image.getPlanes()' on a null object reference
2021-05-28 13:46:33.305 28882-28975/com. W/System.err:     at com.Camera2Fragment$6$1.run(Camera2Fragment.java:927)
2021-05-28 13:46:33.307 28882-28975/com. W/System.err:     at android.os.Handler.handleCallback(Handler.java:873)
2021-05-28 13:46:33.308 28882-28975/com. W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
2021-05-28 13:46:33.310 28882-28975/com. W/System.err:     at android.os.Looper.loop(Looper.java:193)
2021-05-28 13:46:33.311 28882-28975/com. W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:65)

这是我的CaptureSession.CaptureCallback

CameraCaptureSession.CaptureCallback CaptureCallback = new CameraCaptureSession.CaptureCallback() {
            @Override
            public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Bitmap bitmap = null;
                        String nik;

                        try {
                            System.out.println("Array plane : " + mImageReader.acquireLatestImage().getPlanes().toString());
                            ByteBuffer buffer = mImageReader.acquireLatestImage().getPlanes()[0].getBuffer();  // Error start from here, in other device, acquireLatestImage is not null, but in A device is become null
                            byte[] data = new byte[buffer.remaining()];
                            buffer.get(data);
                            bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                        } catch (NullPointerException e) {
                            // **In one device, its fall to here**
                            e.printStackTrace();
                        }

                        if (bitmap == null) {
                            Toast.makeText(getActivity(), "Failed to get image, please try again", Toast.LENGTH_SHORT).show();
                        } else {
                         // other my code (proccessing image, ocr and other)
                        }
                    }
               }
         }
 }

额外的: A 设备的屏幕规格为 10 英寸、800x1280 和 8MP。我不知道它对表面有什么影响,但它只发生在这个设备上。

我已经阅读了一些有关从 Camera2 API 获取图像的问题,但实际上我的代码适用于许多设备。

0 个答案:

没有答案