Android:Camera2 API 仅在 Google Pixel 2 和 2 XL 设备上崩溃

Kas*_*hif 5 android android-camera2

我在我的一个应用程序中使用 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)
Run Code Online (Sandbox Code Playgroud)

这是第 935 行(ImageSaver 类):

ByteBuffer buffer = mImage.getPlanes()[0].getBuffer();
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些东西,但我无法测试,因为我没有 Pixel 2 设备。有什么建议?

更新(2018 年 11 月 5 日):

所以合乎逻辑的解释是从 ImageReader 返回的图像以某种方式为空:

@Override
        public void onImageAvailable(ImageReader reader) {
            mBackgroundHandler.post(new ImageSaver(reader.acquireLatestImage(), mFile));
        }
Run Code Online (Sandbox Code Playgroud)

SO 上的其他一些帖子表明可能不支持 ImageReader 格式。这是格式:

mImageReader = ImageReader.newInstance(largest.getWidth(), largest.getHeight(),
 ImageFormat.JPEG, /*maxImages*/2);
Run Code Online (Sandbox Code Playgroud)

但我无法想象为什么 JPEG 会是不受支持的格式。

还在寻找答案!

小智 0

所有手机使用camera2 api时都会发生三重摄像头崩溃,这适用于所有背面有2个摄像头或单个摄像头的手机

因此建议将 API 更改为多摄像头,而不是限制为 2 或 3 个摄像头