Android:Camera2 API 仅在 Google Pixel 2 和 2 XL 设备上崩溃
Posted
技术标签:
【中文标题】Android:Camera2 API 仅在 Google Pixel 2 和 2 XL 设备上崩溃【英文标题】:Android: Camera2 API crash only on Google Pixel 2 & 2 XL devices 【发布时间】:2019-04-05 19:52:57 【问题描述】:我在我的一个应用程序中使用 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 返回的图像在某种程度上为空:
@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 会是一种不受支持的格式。
仍在寻找答案!
【问题讨论】:
那个示例应用没有Camera2ApiActivity.java
...1173
行是什么意思?
@MartinZeitler 抱歉,我现在更新了行号以匹配示例代码以便于理解。
很久没用Camera2 API了。但这是我的假设。如果我没记错的话,该回调用于预览。不适用于拍摄的图像。大多数设备允许帧的预览流采用 JPEG 格式,但不是所有设备。所有设备的格式都是 de YUV 格式。我会说您可以尝试将格式更改为YUV。
【参考方案1】:
所有手机都有camera2 api的三摄像头崩溃,这适用于所有背面有2个摄像头或单摄像头的手机
因此建议将 API 更改为多摄像头之一,而不是将其限制为 2 或 3 个摄像头
【讨论】:
以上是关于Android:Camera2 API 仅在 Google Pixel 2 和 2 XL 设备上崩溃的主要内容,如果未能解决你的问题,请参考以下文章
Android:如何检查设备是不是实现了 Camera2 api 功能?
Android Camera API/Camera2 API 相机预览及滤镜贴纸等处理
Android 10(api 29)camera2 api回归与广角相机
使用 Camera2(Android 版本 21)API 录制 60fps 视频