1

我正在 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: /

4

2 回答 2

0

如果您从不希望在活动 A 中启用扫描仪,则创建一个新的 DataWedge 配置文件,将其与活动 A 关联并禁用条形码输入插件。在启用条形码输入插件的情况下,您将拥有与活动 B 关联的另一个配置文件。然后,当任一活动获得焦点时,您可以删除有关启用/禁用扫描仪的所有代码逻辑,因为 DataWedge 将自动处理该问题。

于 2019-03-18T08:38:07.730 回答
0

我注意到 DataWedge 的行为相同,但版本之间的差异很小。

  • 6.7 将完全停止发送广播事件或注意到我的 TC20 上的触发按钮。
  • 6.6 只会停止一段时间。切换应用程序/活动也可能有效。

我发现(至少在 6.7.47 上)以下看起来可行;

每次要启用扫描仪进行扫描时,请执行以下操作:

  1. 使用与您的整个应用关联的个人资料。(不仅是具体活动)
  2. 有意禁用 Datawegde(并延迟一点)
  3. 有意启用 DataWedge(并稍作延迟)
  4. 按意图启用扫描仪插件

使用这种方法,我的应用程序不会以禁用的扫描仪告终。

于 2020-02-26T14:40:20.283 回答