0

我有一个集成了 zxing 条码扫描器的 android 应用程序。它工作正常,但只有一个问题:我有另一个条形码扫描仪,所以当我的应用程序要调用条形码扫描仪时,它总是要求我选择应用程序。

我只想强制 zxing 用我的应用程序打开。

有什么解决办法吗?

4

2 回答 2

2

您如何称呼您的 Zxing 条码扫描器?如果您将其集成到您的应用程序中,则不应使用 intentPicker 让用户选择一个。您应该可以直接调用它。但如果没有,您可以执行类似的操作:

Intent zxing = getZxingIntent(this);
zxing.putExtra( "com.google.zxing.client.android.SCAN.SCAN_MODE", "QR_CODE_MODE"); 
startActivityForResult(zxing, 0);

以及获取ZxingIntent的方法:

public static Intent getZxingIntent(Context context) {
    Intent zxingIntent = new Intent("com.google.zxing.client.android.SCAN");
    final PackageManager pm = context.getPackageManager();
    List<ResolveInfo> activityList = pm.queryIntentActivities(zxingIntent,
            0);
    for (int i = 0; i < activityList.size(); i++) {
        ResolveInfo app = activityList.get(i);
        if (app.activityInfo.name.contains("zxing")) {
            zxingIntent.setClassName(app.activityInfo.packageName,
                    app.activityInfo.name);
            return zxingIntent;
        }
    }
    return zxingIntent;
}

编辑: 当您发送Zxing意图时,它会搜索条形码扫描仪,因此如果您有另一个条形码扫描仪,它将创建一个选择器。如果 Zxing 在设备上不可用,您将无法使用它。所以你也应该检查一下。但无论如何,我上面提供的片段应该可以用来查找 Zxing 在设备上是否可用。(但是我没有机会测试它,所以你可能需要稍微改变一下。)

于 2013-07-29T06:39:04.383 回答
0

你可以试试这个

Intent intent = new Intent("com.google.zxing.client.android.SCAN");
            intent.setPackage(getPackageName());
            intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
            startActivityForResult(intent, 0);
于 2014-01-29T08:27:02.450 回答