Почему Zebra InputScannerPlugin перестает реагировать на отправленные трансляции? - PullRequest
1 голос
/ 15 марта 2019

Я создаю Android APK на ZEBRA MC3300 - на этом устройстве предустановлен DataWedge, в моем приложении я использую Zebra InputScannerPlugin для отключения / включения сканера в зависимости от активности. У меня есть код для отключения / включения методов из руководства Zebra, это выглядит так:

    static String scannerInputPlugin = "com.symbol.datawedge.api.ACTION";
    static String extraData = "com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN";

public static void enableScanner(Activity activity){
        try {            
            if(!scannerEnabled) {
                Intent i = new Intent();
                i.setAction(scannerInputPlugin);
                i.putExtra(extraData, "ENABLE_PLUGIN");
                activity.sendBroadcast(i);
            }
            scannerEnabled = true;
        }catch(Exception e){
            Log.d("TERMINALPROP", e.toString());
        }
}
public static void disableScanner(Activity activity){
        try {            
            if(!scannerEnabled) {
                Intent i = new Intent();
                i.setAction(scannerInputPlugin);
                i.putExtra(extraData, "DISABLE_PLUGIN");
                activity.sendBroadcast(i);
            }
            scannerEnabled = true;
        }catch(Exception e){
            Log.d("TERMINALPROP", e.toString());
        }
}

Я использую disableScanner и enableScanner в методах onResumie, и он отлично работает, но я также использую их в своем AsyncTask в методах onPreExecute и onPostExecute.

Иногда у меня возникает проблема с тем, что мой сканер не реагирует на включение / отключение. Похоже, среда выполнения datawedge перестает работать, я посылаю туда трансляцию и ничего не меняется - сканер остается отключенным, но это происходит не каждый раз.

Мне удалось воссоздать проблему несколько раз. Это выглядит так:

У меня есть активность A и B. При активности A при методе onResumie я отключаю сканер, перед тем, как начать действие B, я использую AsyncTask (отключение на preExecute и включение сканера на postExecute), и я переключаюсь на действие B, и там на методе onResume я снова вызываю enableScanner.

И если я переключаю действия очень быстро, иногда мой сканер остается отключенным и перестает реагировать на все мои вызовы enableScanner. Это происходит случайно, иногда после 3-х переключений активности, иногда мне приходится переключать его 20 раз и т. Д.

Есть идеи, что я делаю не так?

@ EDIT Это, вероятно, что-то с плагином Datawedge InputScanner - (я удалил if (! ScannerEnabled) из методов) и просто добавил коды результатов в мой apk, а когда сканер «заблокирован», он возвращает мне SCANNER_ALREADY_ENABLED, когда я вызываю enableScanner, но сканер отключен: /

1 Ответ

0 голосов
/ 18 марта 2019

Если вы никогда не хотите, чтобы сканер был включен в Деятельности A, создайте новый профиль DataWedge, свяжите его с Деятельностью A и отключите плагин для ввода штрих-кода. У вас будет другой профиль, связанный с Деятельностью B, с включенным плагином для ввода штрих-кода. Затем вы можете удалить всю логику кода вокруг включения / выключения сканера, когда какое-либо действие получает фокус, поскольку DataWedge будет обрабатывать это автоматически.

...