【问题标题】:Issue in using Zxing via intent if google goggles is installed如果安装了谷歌护目镜,通过 Intent 使用 Zxing 的问题
【发布时间】:2011-12-24 09:57:32
【问题描述】:

我正在使用以下代码从 Zing 调用条形码扫描仪应用程序

public Button.OnClickListener mScan = new Button.OnClickListener() {
    public void onClick(View v) {
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    }
};

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");
            String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
            // Handle successful scan
        } else if (resultCode == RESULT_CANCELED) {
            // Handle cancel
        }
    }
}

问题是,如果没有安装条形码扫描仪应用程序并且用户有任何其他扫描应用程序,如谷歌护目镜,我没有得到想要的结果。这会破坏我的应用程序。

有什么方法可以防止这种情况发生吗??

【问题讨论】:

    标签: android zxing google-goggles


    【解决方案1】:

    是的。使用值“com.google.zxing.client.android”调用Intent.setPackage()。这将迫使它只接受来自条形码扫描仪的响应。

    但是请注意,这将使其他应用程序无法响应,例如 Barcode Scanner+。

    【讨论】:

    • 您可以遍历PackageManager.queryIntentActivities的结果并检查应用程序白名单,然后在Intent.setPackage()中使用任何有效的包名称
    • 感谢这有效,理想情况下应该是白名单吗?条码扫描仪、条码扫描仪+ 等等??
    • 就是这样。 com.google.zxing.client.android、com.srowen.bs.android 和 com.srowen.bs.android.simple。我会相应地重写集成代码。
    • 仅针对那些感兴趣的人,如果您确实想强制使用 Google Goggles,则该行是 'intent.setPackage("com.google.android.apps.unveil")`。我仍然鼓励使用 zxing 版本。它是一个很棒的项目。
    • OP 说 Goggles 没有按预期回复 - 有人有更多信息吗?仅供参考,我将此更改合并到集成商代码中:code.google.com/p/zxing/source/browse/…
    【解决方案2】:

    最好将条形码扫描仪集成到您的应用中。 Zxing 是一个开源代码,你可以从here 下载它。对于集成,请参阅:http://www.falatic.com/index.php/12/building-zxing-for-android-part-3-using-eclipse。我认为这将解决您的问题。

    【讨论】:

    • 我们不建议像这样集成代码。无论如何都没有必要解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多