1

我正在构建的应用程序使用 zxing 库来扫描一维和二维条码。我目前正在 Galaxy S3 上测试我的应用程序,每次手动或通过 IntentIntegrator 库打开 zxing Barcode Scanner 应用程序时,Barcode Scanner 在成功解码图像后崩溃。我无法查看堆栈跟踪,因为错误发生在我的项目之外。

有没有人能够在他们的设备上重现此错误?还有人知道导致问题的原因或修复方法是什么吗?

如果这还不够信息,我可以尝试下载源代码,自己构建它,然后从堆栈跟踪中识别问题。

4

2 回答 2

0

好的,所以我下载了项目源,构建它,在我的设备上运行,发现了问题。该问题与 CaptureActivity 将信息放入系统剪贴板这一事实有关。

根据我在 Galaxy S3 上开发的经验,我遇到了三星实现剪贴板服务的多个问题,即获取剪贴板服务的请求返回 null。

无论如何,在 ZXing 的 CaptureActivity 中,您可以找到以下代码行:

if (copyToClipboard && !resultHandler.areContentsSecure()) {
  ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
  if (displayContents != null) {
    clipboard.setText(displayContents);
  }
}

不幸的是,由于剪贴板变量为空,应用程序将因空指针异常而崩溃。我注释掉了这部分代码,应用程序似乎运行没有问题。我相信在这里简单地添加一个空检查应该可以防止 S3 出现问题,同时允许该功能保留在其他设备上。我还假设应用程序的其他部分不依赖于输入剪贴板的数据;但是,由于我不熟悉应用程序的所有源代码,我无法确定这一点。

我将继续尝试将 ZXing 集成到我自己的项目中,看看这个修复是否有效。

现在,如果只有某人(我假设是三星)会修复 S3 的剪贴板实现!

更新:

针对这个问题,我尝试了几种不同的解决方法,包括简单的空值检查和使用不推荐使用的方法(zxing 当前使用不推荐使用的剪贴板方法),但不幸的是,这些方法都不起作用。似乎不是 ClipboardManager 本身为空,而是它内部的一些成员变量为空。再一次,我猜测这是 S3 特有的,因为这是我遇到此问题的唯一手机。

不幸的是,这意味着我目前最好的选择是完全删除对剪贴板的引用。

于 2013-01-19T20:01:01.637 回答
0

查看我在Barcode Scanner+中的实现,我可以建议尝试更新的剪贴板 API 并尝试以下操作:

ClipboardManager manager = ...;
manager.setPrimaryClip(ClipData.newPlainText(null, "your text here"));

这仅在您可以在以后的 Android 版本中使用更新的 API 时可用。

NullPointerException根据我之前的评论,如果副本不重要,您总是可以抓住并继续。为了更好地衡量,我将在源代码中的另一个位置执行此操作。

于 2013-01-20T00:01:52.800 回答