我正在使用热门的ZXing项目在我的Android应用上启用条形码扫描。
我想手动设置取景器的宽度和高度,所以我使用了以下内容:
intent.putExtra("SCAN_WIDTH", 400);
intent.putExtra("SCAN_HEIGHT", 300);
在发送我的意图之前。但是,该应用因NullPointerException
中第279行的CameraManager.java
而崩溃。我做了一些调试,看起来screenResolution
的{{1}}成员从未初始化。我调试了一些,发现没有及时调用configManager
(这应该通过回调来完成)。至少,这对我来说就是这样,因为surfaceCreated()
中的surfaceCreated()
负责初始化CaptureActivity.java
的成员。我在这里和谷歌进行了一些搜索,但似乎人们不会使用那些意图附加内容configManager
和SCAN_WIDTH
。他们在ZXing代码中手动设置SCAN_HEIGHT
和MIN
宽度/高度值,我试图避免这些。任何帮助将不胜感激。
当我没有通过意图设置宽度/高度值时,扫描仪工作正常。
编辑:更新我的ZXing库版本后,这不再是一个问题。它还解决了我在2012款Nexus 7上遇到的前置摄像头问题。
答案 0 :(得分:1)
screenResolution
肯定会在initFromCameraParameters
中设置。它会在驱动程序打开时发生。如果surfaceCreated
稍后发生,则可以,因为onResume
方法在创建曲面后注册回调以初始化相机(如果它尚不可用)。
onResume
即使未初始化也会调用setManualFramingRect
,但在这种情况下,它只会将请求保存在requestedFramingRectWidth
和requestedFramingRectHeight
中并稍后设置。
我认为这个案子得到了正确处理,但一如既往,我无法100%确定没有疏忽。也许您可以更多地说明您认为问题的来源。