zxing バーコード スキャナーを統合した Android アプリケーションがあります。正常に動作しますが、問題が 1 つだけあります。別のバーコード スキャナーがあるため、アプリケーションがバーコード スキャナーを呼び出すと、常にアプリケーションを選択するように求められます。
アプリケーションで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);