我在以下其中一个应用中使用Camera2示例代码:https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java
一直运行良好,直到最近该应用程序在图像捕获时崩溃,但仅在Google Pixel 2和Pixel 2 XL设备上崩溃。
崩溃报告显示以下内容:
java.lang.NullPointerException:
at ....Camera2BasicFragment$ImageSaver.run (Camera2BasicFragment.java:935)
at android.os.Handler.handleCallback (Handler.java:873)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loop (Looper.java:193)
at android.os.HandlerThread.run (HandlerThread.java:65)
这是第935行(ImageSaver类):
ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
我尝试了一些操作,但由于没有Pixel 2设备,因此无法测试。有什么建议吗?
更新(2018年11月5日):
因此,逻辑上的解释是,从ImageReader返回的图像以某种方式为null:
@Override
public void onImageAvailable(ImageReader reader) {
mBackgroundHandler.post(new ImageSaver(reader.acquireLatestImage(), mFile));
}
SO上的其他一些帖子建议可能不支持ImageReader格式。格式如下:
mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(),
ImageFormat.JPEG, /*maxImages*/2);
但是我无法想象为什么JPEG是不受支持的格式。
还在寻找答案!
答案 0 :(得分:0)
所有手机都有带camera2 api的三摄像头崩溃,这适用于所有背面有2个摄像头或单摄像头的手机
因此建议将 API 更改为多摄像头,而不是将其限制为 2 或 3 个摄像头