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

时间:2015-01-08 17:32:25

标签: android android-intent zxing

我正在使用热门的ZXing项目在我的Android应用上启用条形码扫描。

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

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

在发送我的意图之前。但是,该应用因NullPointerException中第279行的CameraManager.java而崩溃。我做了一些调试,看起来screenResolution的{​​{1}}成员从未初始化。我调试了一些,发现没有及时调用configManager(这应该通过回调来完成)。至少,这对我来说就是这样,因为surfaceCreated()中的surfaceCreated()负责初始化CaptureActivity.java的成员。我在这里和谷歌进行了一些搜索,但似乎人们不会使用那些意图附加内容configManagerSCAN_WIDTH。他们在ZXing代码中手动设置SCAN_HEIGHTMIN宽度/高度值,我试图避免这些。任何帮助将不胜感激。

当我没有通过意图设置宽度/高度值时,扫描仪工作正常。

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

1 个答案:

答案 0 :(得分:1)

screenResolution肯定会在initFromCameraParameters中设置。它会在驱动程序打开时发生。如果surfaceCreated稍后发生,则可以,因为onResume方法在创建曲面后注册回调以初始化相机(如果它尚不可用)。

onResume即使未初始化也会调用setManualFramingRect,但在这种情况下,它只会将请求保存在requestedFramingRectWidthrequestedFramingRectHeight中并稍后设置。

我认为这个案子得到了正确处理,但一如既往,我无法100%确定没有疏忽。也许您可以更多地说明您认为问题的来源。