手动设置 SCAN_WIDTH 和 SCAN_HEIGHT 导致 ZXing 崩溃

Manually setting the SCAN_WIDTH and SCAN_HEIGHT causes ZXing to crash

我正在使用流行的 ZXing 项目在我的 Android 应用程序上启用条码扫描。

我想手动设置取景器的宽度和高度,所以我使用了以下内容:

intent.putExtra("SCAN_WIDTH", 400);
intent.putExtra("SCAN_HEIGHT", 300);

在发送我的意图之前。但是,由于 CameraManager.java 中第 279 行的 NullPointerException,应用程序崩溃了。我做了一些调试,看起来 configManagerscreenResolution 成员从未被初始化。我调试了一些,发现 surfaceCreated() 没有及时调用(这应该通过回调来完成)。至少,在我看来是这样,因为 CaptureActivity.java 中的 surfaceCreated() 负责初始化 configManager 的那些成员。我在此处和 Google 上进行了一些搜索,但似乎人们并没有使用这些额外的意图 SCAN_WIDTHSCAN_HEIGHT。他们在 ZXing 代码中手动设置 MINMAX width/height 值,我试图避免这种情况。任何帮助将不胜感激。

当我没有通过 intent 设置那些 width/height 值时,扫描仪工作正常。

编辑: 更新我的 ZXing 库版本后,这不再是问题。它还解决了我在使用 2012 Nexus 7 时遇到的前置摄像头问题。

screenResolution肯定是设置的,在initFromCameraParameters。它发生在驱动程序打开时。如果 surfaceCreated 稍晚发生也没关系,因为 onResume 方法会注册一个回调以在创建表面后初始化相机(如果它尚不可用)。

onResume 调用 setManualFramingRect 即使它没有初始化,但是,在那种情况下它只是将请求保存在 requestedFramingRectWidthrequestedFramingRectHeight 中并稍后设置。

我认为此案处理得当,但一如既往,我不能 100% 确定没有疏忽。也许您可以详细说明您认为问题出在哪里。