Я создаю 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, но сканер отключен: /