Проблема с использованием Zxing через intent, если установлены Google goggles

#android #zxing #google-goggles

#Android #zxing #google-goggles

Вопрос:

Я использую следующий код для вызова приложений для сканирования штрих-кодов из 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
        }
    }
}
  

Проблема в том, что если приложение для сканирования штрих-кодов не установлено, и у пользователя есть любое другое приложение для сканирования, такое как Google goggles, я не получаю желаемого результата.Это нарушает работу моего приложения.

Есть ли какой-либо способ, которым я могу предотвратить это??

Ответ №1:

Да. вызов Intent.setPackage() со значением «com.google.zxing.client.android». Это заставит его принимать ответ только от сканера штрих-кода.

Однако обратите внимание, что это сделает невозможным ответ других приложений, таких как сканер штрих-кода .

Комментарии:

1. Вы могли бы повторить результат PackageManager.queryIntentActivities и проверить белый список приложений, а затем использовать любое допустимое имя пакета в Intent.setPackage()

2. спасибо, это сработало, каким в идеале должен быть белый список?? Сканер штрих-кода, сканер штрих-кода и что еще??

3. Это все. com.google.zxing.client.android, com.srowen.bs.android и com.srowen.bs.android.simple. Я соответствующим образом перепишу код интеграции.

4. Просто для тех, кому интересно, если вы хотите принудительно использовать Google Goggles, строка «intent.setPackage («com.google.android.apps.unveil»)`. Я бы все равно рекомендовал использовать версию zxing .. это отличный проект.

5. OP сказал, что Goggles отвечает не так, как ожидалось — у кого-нибудь есть дополнительная информация об этом? К вашему сведению, я включил это изменение в код интегратора: code.google.com/p/zxing/source/browse /…

Ответ №2:

лучше интегрировать сканер штрих-кода в ваше приложение. Zxing — это открытый исходный код, который вы можете скачать здесь. И для интеграции, пожалуйста, обратитесь к этому:http://www.falatic.com/index.php/12/building-zxing-for-android-part-3-using-eclipse . Я думаю, это решит вашу проблему.

Комментарии:

1. Мы не рекомендуем интегрировать код подобным образом. В любом случае нет необходимости решать эту проблему.