我有一个集成了 zxing 条码扫描器的 android 应用程序。它工作正常,但只有一个问题:我有另一个条形码扫描仪,所以当我的应用程序要调用条形码扫描仪时,它总是要求我选择应用程序。
我只想强制 zxing 用我的应用程序打开。
有什么解决办法吗?
您如何称呼您的 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 在设备上是否可用。(但是我没有机会测试它,所以你可能需要稍微改变一下。)
你可以试试这个
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.setPackage(getPackageName());
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);