我正在 ZEBRA MC3300 上创建一个 Android apk - 此设备预装了 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());
}
}
我在 onResumie 方法中使用 disableScanner 和 enableScanner,它工作正常,但我也在我的 AsyncTask 中的 onPreExecute 和 onPostExecute 方法中使用它们。
有时我遇到的问题是我的扫描仪对启用/禁用没有反应。看起来 datawedge 运行时停止工作,我向那里发送广播并且没有任何变化 - 扫描仪保持禁用状态,但并非每次都发生。
我能够多次重现问题。它看起来像这样:
我有活动 A 和 B。在方法 onResumie 的活动 A 中,我正在禁用扫描仪,在我开始活动 B 之前,我正在使用 AsyncTask(它在 preExecute 上禁用,并在 postExecute 上启用 Scanner),我正在切换到活动 B 并在那里onResume 方法我再次调用 enableScanner。
如果我非常快速地切换活动,有时我的扫描仪会保持禁用状态,并停止对我所有的 enableScanner 调用做出反应。它随机发生,有时在 3 次活动切换后,有时我必须切换 20 次等。
知道我做错了什么吗?
@EDIT它可能与Datawedge InputScanner插件有关-(我从方法中删除了if(!scannerEnabled))并将结果代码添加到我的apk中,当扫描仪被“阻止”时,它会在我调用enableScanner但扫描仪被禁用时返回我SCANNER_ALREADY_ENABLED: /