扫描器输入插件

DataWedge 7.4

SCANNER_INPUT_PLUGIN

用于启用/禁用当前活动配置文件使用的扫描器插件。禁用扫描器插件可有效地禁用针对该配置文件的扫描,无论该配置文件是否与应用程序相关联。此 API 仅更改扫描器的运行时状态;它不会保留配置文件更改

仅当在活动配置文件中启用条码输入时才正常运行

函数原型

Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "<parameter>");

参数

ACTION [字符串]:"com.symbol.datawedge.api.ACTION"

EXTRA_DATA [字符串]:"com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN"

<参数>:作为字符串的参数,使用以下任意一项:

  • SUSPEND_PLUGIN - 挂起扫描器,使其在从 WAITING 或 SCANNING 状态切换时暂时处于不活动状态。SCANNER_STATUS 通知广播 IDLE 状态。
  • RESUME_PLUGIN - 从 SUSPEND_PLUGIN 挂起状态更改时恢复扫描器。SCANNER_STATUS 通知广播 WAITING 和 SCANNING 状态,根据是否正在进行扫描在各状态之间循环。在 WAITING 状态下,会期待用户执行操作,如按下触发器。在 SCANNING 状态下,则会主动执行由按下触发器等操作引起的扫描。
  • ENABLE_PLUGIN - 启用插件;扫描器变为活动状态。SCANNER_STATUS 通知广播 WAITING 和 SCANNING 状态,根据是否正在进行扫描在各状态之间循环。
  • DISABLE_PLUGIN - 禁用插件;扫描器变为不活动状态。SCANNER_STATUS 通知广播 DISABLED 状态。

使用 SUSPEND_PLUGIN/RESUME_PLUGIN:当应用程序需要挂起或暂时停用扫描器时,此功能非常有用。当扫描器激活时(例如,从配置文件配置或者 RESUME_PLUGIN 或 ENABLE_PLUGIN Intent API),SCANNER_STATUS 通知会广播 WAITING 和 SCANNING 状态,根据是否正在进行扫描在各状态之间循环。要让应用程序挂起扫描,请仅在处于 SCANNING 和 WAITING 状态时执行操作 - 当这些状态被广播时,使用 SUSPEND_PLUGIN 参数保持挂起状态并使扫描器不可用。扫描挂起后,SCANNER_STATUS 会广播 IDLE 状态。使用 RESUME_PLUGIN 可重新激活扫描器。

重要说明:为了避免不必要地使用启用/禁用扫描器 API 调用,Zebra 建议应用程序进行注册以接收有关扫描器状态更改的通知(使用 GET_SCANNER_STATUS API 或 REGISTER_FOR_NOTIFICATION API 的 SCANNER_STATUS)。这使应用程序可以立即接收扫描器状态更改通知,而不必进行查询并等待结果,因此应用程序可在进行任何状态更改之前了解当前状态。状态更改通知包括活动配置文件名称,这使应用程序仅在状态更改影响相关配置文件时才使用启用/禁用扫描器 API 调用。

结果代码

如果应用程序包括 Intent 额外项 RECEIVE_RESULTCOMMAND_IDENTIFIER 以使应用程序能够使用 DataWedge 结果 Intent 机制获取结果,则 DataWedge 返回以下错误代码。请参阅以下示例

  • SCANNER_ALREADY_SUSPENDED - 收到用于挂起已挂起的扫描器的 Intent。
  • PLUGIN_DISABLED - 扫描器插件已禁用,因此无法执行挂起/恢复操作。
  • SCANNER_ALREADY_RESUMED - 收到恢复 Intent,但扫描器未处于已挂起状态。
  • SCANNER_RESUME_FAILED - 扫描器恢复不成功。
  • SCANNER_ALREADY_DISABLED - 扫描器处于已禁用状态,从而会阻止任何进一步的操作。
  • DATAWEDGE_DISABLED - 用于禁用 DataWedge 的操作不成功。
  • PARAMETER_INVALID - 收到无效参数。
  • PROFILE_DISABLED - 用于禁用配置文件的操作不成功。
  • SCANNER_ALREADY_DISABLED - 收到用于禁用已禁用的扫描器的 Intent。
  • SCANNER_ALREADY_ENABLED - 收到用于启用已启用的扫描器的 Intent。
  • SCANNER_DISABLE_FAILED - 扫描器禁用不成功。
  • SCANNER_ENABLE_FAILED - 用于启用扫描器的操作不成功。

有关更多信息,另请参阅结果代码指南

返回值

将错误和调试消息记录到可通过 logcat 命令查看和过滤的 Android 日志记录系统。从 ADB Shell 使用 logcat 查看日志消息:

$ adb logcat -s DWAPI

记录无效操作和参数的错误消息。

示例代码

发送挂起和恢复 Intent:

private void suspendScanner() { Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "SUSPEND_PLUGIN"); i.putExtra("SEND_RESULT", "true"); i.putExtra("COMMAND_IDENTIFIER", "MY_SUSPEND_SCANNER"); //Unique identifier this.sendBroadcast(i); } private void resumeScanner() { Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "RESUME_PLUGIN"); i.putExtra("SEND_RESULT", "true"); i.putExtra("COMMAND_IDENTIFIER", "MY_RESUME_SCANNER"); //Unique identifier this.sendBroadcast(i); }

启用/禁用扫描器输入插件:

private void enableScanner() { Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "ENABLE_PLUGIN"); i.putExtra("SEND_RESULT", "true"); i.putExtra("COMMAND_IDENTIFIER", "MY_ENABLE_SCANNER"); //Unique identifier this.sendBroadcast(i); } private void disableScanner() { Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "DISABLE_PLUGIN"); i.putExtra("SEND_RESULT", "true"); i.putExtra("COMMAND_IDENTIFIER", "MY_DISABLE_SCANNER"); //Unique identifier this.sendBroadcast(i); }

生成和接收结果代码

命令和配置 Intent 参数决定是否发送结果代码(默认情况下处于禁用状态)。使用 SEND_RESULT 时,COMMAND_IDENTIFIER 用于将结果代码与起源 Intent 进行匹配。这些参数的示例用法如下所示。

注意:修改此通用代码以与要使用的 API 匹配

接收挂起/恢复命令结果:

//call in onResume() method private void registerReceivers() { IntentFilter filter = new IntentFilter(); filter.addAction("com.symbol.datawedge.api.RESULT_ACTION"); filter.addCategory(Intent.CATEGORY_DEFAULT); registerReceiver(receiver, filter); } //call in onPause() method private void unRegisterReceivers() { unregisterReceiver(receiver); } BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { //Get result of the suspend/resume API call String action = intent.getAction(); if (action != null && action.equals("com.symbol.datawedge.api.RESULT_ACTION")) { Bundle extras = intent.getExtras(); if (extras != null) { //user specified ID String cmdID = extras.getString("COMMAND_IDENTIFIER"); if ("MY_RESUME_SCANNER".equals(cmdID) || "MY_SUSPEND_SCANNER".equals(cmdID)) { //success or failure String result = extras.getString("RESULT"); //Original command String command = extras.getString("COMMAND"); if ("FAILURE".equals(result)) { Bundle info = extras.getBundle("RESULT_INFO"); String errorCode = ""; if (info != null) { errorCode = info.getString("RESULT_CODE"); } Log.d(TAG, " Command:" + command + ":" + cmdID + ":" + result + ",Code:" + errorCode); } else { Log.d(TAG, " Command:" + command + ":" + cmdID + ":" + result); } } } } } };

接收启用/禁用插件结果:

// send the intent Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); // Use "ENABLE_PLUGIN" or "DISABLE_PLUGIN" i.putExtra("com.symbol.datawedge.api.SCANNER_INPUT_PLUGIN", "ENABLE_PLUGIN"); // request and identify the result code i.putExtra("SEND_RESULT","true"); i.putExtra("COMMAND_IDENTIFIER","123456789"); this.sendBroadcast(i); // register to receive the result public void onReceive(Context context, Intent intent){ String command = intent.getStringExtra("COMMAND"); String commandidentifier = intent.getStringExtra("COMMAND_IDENTIFIER"); String result = intent.getStringExtra("RESULT"); Bundle bundle = new Bundle(); String resultInfo = ""; if(intent.hasExtra("RESULT_INFO")){ bundle = intent.getBundleExtra("RESULT_INFO"); Set<String> keys = bundle.keySet(); for (String key: keys) { resultInfo += key + ": "+bundle.getString(key) + "\n"; } } String text = "Command: "+command+"\n" + "Result: " +result+"\n" + "Result Info: " +resultInfo + "\n" + "CID:"+commandidentifier; Toast.makeText(context, text, Toast.LENGTH_LONG).show(); };

注释

此 Intent 为当前已启用的配置文件启用/禁用扫描器插件。例如,假设活动 A 启动并使用数据捕获 API Intent,以切换到启用扫描器插件的配置文件 A,然后在某种情况下使用数据捕获 API 来禁用扫描器插件。将启动活动 B。在 DataWedge 中,配置文件 B 与活动 B 相关联。DataWedge 切换到配置文件 B。当活动 A 在 onResume 方法中返回到前台时,活动 A 必须使用 Data Capture API Intent,以切换回配置文件 A,然后再次使用 Data Capture API Intent 禁用扫描器插件,以返回至其当时所处状态。

备注

  • 上述情况假设配置文件 A 未与任何应用程序/活动关联,那么当焦点切换回活动 A 时,DataWedge 将不会自动切换到配置文件 A,并且活动 A 必须在其 onResume 方法中切换回配置文件 A。由于当活动暂停时,DataWedge 将自动切换配置文件,因此建议从活动的 onResume 方法调用此 API 函数。

  • Zebra 建议在需要更快响应的应用程序中使用 SUSPEND_PLUGIN 和 RESUME_PLUGIN,以在同一应用程序中的活动间禁用和启用条码扫描。

此 API 仅更改扫描器的运行时状态;它不会保留配置文件更改


另请参阅

Zebra 支持中心 | 集成商指南、产品手册、软件下载和支持

LaunchPad | Zebra 开发人员社区

Intent | Android 开发人员

Intent 和 Intent 过滤器 | Android 开发人员

Android Intent | 教程