切换到配置文件

DataWedge 7.4

SWITCH_TO_PROFILE

用于将应用程序的关联切换到指定的配置文件。指定的配置文件不能已与另一应用程序相关联;一个应用程序不能与多个配置文件相关联。

小心:如果 GET_IGNORE_DISABLED_PROFILES API 返回值为 "true",则会阻止切换到已禁用的配置文件。

配置文件回顾

DataWedge 基于配置文件和插件。配置文件包含有关 DataWedge 将如何与给定应用程序一起运行的信息。

配置文件信息包括:

  • 关联的应用程序
  • 输入插件配置
  • 输出插件配置
  • 处理插件配置

DataWedge 包括一个默认配置文件 Profile0,其在 DataWedge 首次运行时自动创建。

使用配置文件,每个应用程序可以具有特定的 DataWedge 配置。例如,当每个用户应用程序来到前台时,它都可以具有一个以所需格式输出已扫描数据的配置文件。可配置 DataWedge 以根据每个应用程序的要求对同组已捕获的数据进行不同处理。

注意

可将单个配置文件与一个或多个活动或应用程序相关联。但是,一个活动只能与一个配置文件相关联。

使用场景

假设一个应用程序具有两个活动。活动 A 仅需要扫描的 EAN13 条码。活动 B 仅需 MSR 卡数据。将配置文件 B 配置为仅扫描 EAN13 条码,并且没有关联。将配置文件 M 配置为仅接受 MSR 输入,并且没有关联。当活动 A 启动时,它使用 SWITCH_TO_PROFILE 激活配置文件 B。同样,当活动 B 启动时,它使用 SWITCH_TO_PROFILE 激活配置文件 M。

如果另一活动/应用程序来到前台,则 DataWedge 自动配置文件切换将相应地将 DataWedge 配置文件设置为默认配置文件或关联配置文件。

当活动 A(或活动 B)返回到前台,则它将使用 SWITCH_TO_PROFILE 将配置文件返回到配置文件 B(或配置文件 M)。

函数原型

Intent i = new Intent(); i.setAction("com.symbol.datawedge.api.ACTION"); i.putExtra("com.symbol.datawedge.api.SWITCH_TO_PROFILE", "<profile name>");

参数

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

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

<配置文件名称>:要设置为活动配置文件的配置文件名称(区分大小写的字符串)。

结果代码

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

  • PROFILE_HAS_APP_ASSOCIATION - FAILURE
  • PROFILE_NOT_FOUND - FAILURE
  • PROFILE_ALREADY_SET - FAILURE
  • PROFILE_NAME_EMPTY - FAILURE
  • DATAWEDGE_DISABLED - FAILURE

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

返回值

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

$ adb logcat -s DWAPI

记录无效操作、参数和故障(例如,配置文件未找到或已与某个应用程序相关联)的错误消息。

示例代码

// define action and data strings String switchToProfile = "com.symbol.datawedge.api.ACTION"; String extraData = "com.symbol.datawedge.api.SWITCH_TO_PROFILE"; public void onResume() { super.onResume(); // create the intent Intent i = new Intent(); // set the action to perform i.setAction(switchToProfile); // add additional info i.putExtra(extraData, "myProfile"); // send the intent to DataWedge this.sendBroadcast(i); }

生成和接收结果代码

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

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

// send the intent Intent i = new Intent(); i.setAction(ACTION); i.putExtra("com.symbol.datawedge.api.CREATE_PROFILE", "Profile1"); // 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(); };

注释

如果指定的配置文件不存在或已与某个应用程序相关联,则此 API 函数将不起任何作用。

DataWedge 在配置文件和活动之间存在一对一的关系;一个配置文件只能与单个活动相关联。当首次创建配置文件时,它不与任何应用程序相关联,并且在关联之前不会被激活。这使它可以创建多个未关联的配置文件。

此 API 函数激活此类配置文件。

例如,假设配置文件 A 未与活动 B 关联且配置文件 B 已与之关联。如果启动活动 A 并使用 SWITCH_TO_PROFILE 函数以切换到配置文件 A,则当活动 A 位于前台时,配置文件 A 处于活动状态。当活动 B 来到前台时,DataWedge 将自动切换到配置文件 B。

当活动 A 返回到前台,则应用程序必须再次使用 SWITCH_TO_PROFILE 以切换回配置文件 A。这将在活动 A 的 onResume 方法中完成。

备注

  • DataWedge 将在活动暂停时自动切换配置文件,因此 Zebra 建议从活动的 onResume 方法调用此 API 函数。
  • 切换到配置文件之后,此未关联的配置文件不会分配给应用程序/活动,并可在将来与不同应用程序/活动一起使用。
  • 为了实现向后兼容,DataWedge 的自动配置文件切换不受上述 API 命令的影响。这就是这些命令仅与不关联的配置文件和应用程序配合使用的原因。

DataWedge 自动配置文件切换的工作方式如下:

每秒 …

  • newProfileId 设置为当前前台活动的关联配置文件 ID。
  • 如果不能找到关联的配置文件,则将 newProfileId 设置为当前前台应用程序的关联配置文件 ID。
  • 如果不能找到相关联的配置文件,则将 newProfileId 设置为当前默认配置文件(这可能不是 Profile0)。
  • 针对 currentProfileId 检查 newProfileId。如果它们不同:
    • 停用当前配置文件
    • 激活新配置文件 (newProfileId)
    • 设置 currentProfileId = newProfileId

另请参阅

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

LaunchPad | Zebra 开发人员社区

Intent | Android 开发人员

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

Android Intent | 教程