Intent 输出

DataWedge 7.4

概述

Intent 输出允许将 DataWedge 获取和处理的数据作为 Android Intent 对象中的有效负载,发送到关联的前台应用程序。这允许将获取的数据以编程方式传递到应用程序,可以在此应用程序中消耗或进一步处理该数据。如同通过 DataWedge API 可激活多个 DataWedge 功能一样,可通过 Intent 激活应用程序的核心组件(其活动、服务和广播接收器)。

Intent 对象

Intent 对象是描述所需操作的信息捆绑包。它包括要处理的数据、应执行操作的组件类别和一些其他的相关数据和/或指令。启动 Intent 时,Android 会查找适当的组件以响应 Intent,启动组件的新实例(如果需要),以及将 Intent 对象传递给它。

组件通过 Intent 过滤器推广其功能(它们可以响应的 Intent 种类)。由于系统在其启动组件之前必须了解组件可以处理的 Intent 种类,需要在应用程序的 AndroidManifest.xml 文件中将“Intent 过滤器”指定为 <intent-filter> 元素。一个组件可有任意数量的“Intent 过滤器”,每个描述不同的功能。

例如,如果清单包含...

<intent-filter> ... <action android:name="android.intent.action.DEFAULT" /><category android:name="android.intent.category.MAIN" /></intent-filter>

...“Intent 输出”配置中的 Intent 操作将是:

android.intent.action.DEFAULT

且 Intent 类别将是:

android.intent.category.MAIN


另请参阅


输出原始数据

除了其正常的纯文本和十六进制模式,DataWedge 还可在任何编码器的应用程序之前以其原始表单形式输出已获取数据。这在需要自定义编码器获取 Zebra 不支持的字符集时非常有用。

使用 com.symbol.datawedge.decode_data Intent 额外项将原始数据接收为字节流。请参阅下面的“单一解码模式”部分

无法将原始数据输出为按键


Intent 输出设置

DataWedge 如在其 AndroidManifest.xml 中所述那样,通过 Intent 类别中的 Intent 操作调用 Intent。

结合使用时,这两个值如同应用程序可监听使用相同组合的 Intent 的“通道”,从其他使用不同值对的 Intent 中过滤出“噪音”。知道这些值以后,必须设置匹配的 DataWedge Intent 输出

重要说明:对于可直接输出到活动的扫描应用程序,该活动在应用程序的 AndroidManifest.xml 文件中必须指定为“singleTop”。不以这种方式指定活动将导致在每次解码时启动一个活动实例,并且将已获取的数据发送到每个新生成的实例。

此功能的参数可通过 UI 或通过使用 Set Config API 进行配置。


要设置 DataWedge 操作/类别对

1.找到正在配置的配置文件的“Intent 输出”部分

2.选中“已启用”框以激活“Intent 输出”:
“启动器”配置文件的“Intent 输出”选项

3.指定操作、类别和交付,如下所述:

Intent 操作 - 指定处理 Intent 的操作

Intent 类别 - 指定要处理的 Intent 的类别

Intent 交付 - 用于从四种交付方法中选择一种,用于基于 Intent 的数据:

  • 通 startActivity 发送
  • 通过 startService 发送
  • 通过 startForegroundService 发送
  • 广播 Intent

将 Intent 交付设置为“广播 Intent”时,可以设置接收器前台标记 Intent.FLAG_RECEIVER_FOREGROUND,使广播收件人有权使用更短超时时间间隔在前台优先运行。Zebra 建议仅当在交付 Intent 立即遵循设备启动时看到延迟才使用此标记

当 Intent 交付设置为“通过 startForegroundService 发送”时,会调用 startForegroundService() Android API 以交付数据。此选项适用于 Android Oreo (v8.0) 和更高版本。

当 Intent 交付设置为“通过 startService 发送”时,对于 Android Oreo (v8.0) 之前的设备,会调用 startService() Android API 以交付数据。对于 Android Oreo 和更高版本设备,如果 startService() 调用失败,则可使用此设置中的“失败时使用 startForegroundService”选项来调用 startForegroundService()。借助此单个选项,可同时为 Android Oreo 之前和之后的设备提供支持。


单一解码模式

单一模式一次读取单个条码,并对其进行解码,这是最常见的解码模式。有关同时对多个条码进行解码,如使用 UDI 兼容对象,请参阅 UDI/多解码模式

参数

名称:"com.symbol.datawedge.source"
类型:[字符串]
内容:传入数据源
可能的值

  • "msr"
  • "scanner"
  • "simulscan"
  • "serial"
  • "voice"
  • "rfid"

注意:对于摄像头、成像器或扫描器,传入数据源是“扫描器”。


名称:"com.symbol.datawedge.label_type"
类型:[字符串]
内容:条码标签类型(即“EAN128”)


名称:"com.symbol.datawedge.data_string"
类型:[字符串]
内容:获取的条码字符
示例:"abcde12345"


名称:"com.symbol.datawedge.decode_data"
类型:[列表 <字节 [ ]>]
内容:作为字节数组的数组列表的已获取原始(未修改)数据
示例:List_Item_1(array_1(byte11,byte12,byte13)),List_Item_2(array_2(byte21,byte22,byte23)) ...
示例代码

ArrayList<byte[]> rawData = (ArrayList <byte[]>) initiatingIntent.getSerializableExtra("com.symbol.datawedge.decode_data"); if (rawData != null) { byte[] rawBytes = rawData.get(0); for (int i = 0; i < rawBytes.length; i++) Log.d(LOG_TAG, i + ": " + rawBytes[i]); }

名称:"com.symbol.datawedge.decoded_mode"
类型:[字符串]
内容:用于对传入数据进行解码的模式
可能的值

  • "multiple_decode"
  • "single_decode"

UDI/多解码模式

对 UDI 兼容的对象进行解码时,从多个条码同时获取数据,并且作为多解码捆绑包输出,这不同于单一解码捆绑包。DataWedge 还可在单一扫描中获取多个非 UDI 条码。本部分适用于这两种模式。

参数

名称:"com.symbol.datawedge.decode_mode"
类型:[字符串]
内容:用于对传入数据进行解码的模式
可能的值

  • "multiple_decode"
  • "single_decode"

名称:"com.symbol.datawedge.smart_decode_type"
类型:[字符串]
内容:解码类型
可能的值

  • “udi”
  • “multibarcode”

名称:"com.symbol.datawedge.data_string"
类型:[字符串]
内容:已获取的条码字符
示例:"abcde12345"


名称:"com.symbol.datawedge.decode_data"
类型:[列表 <字节 [ ]>]
内容:作为字节数组的数组列表的已获取原始(未修改)数据
示例:List_Item_1(array_1(byte11,byte12,byte13)), List_Item_2(array_2(byte21,byte22,byte23)) ...


名称:"com.symbol.datawedge.source"
类型:[字符串]
内容:传入数据源
可能的值

  • "msr"
  • "scanner"
  • "simulscan"

名称:"com.symbol.datawedge.label_id"
类型:[字符串]
内容:传入数据的 UDI 类型
可能的值

  • “UDI_HIBCC”
  • “UDI_GS1”
  • “UDI_ICCBBA”
  • “UNDEFINED”

名称:"com.symbol.datawedge.barcodes"
类型:[列表 <捆绑包>]
内容:请参阅捆绑包说明(见下文)


名称:"com.symbol.datawedge.tokenized_data"
类型:[列表 <捆绑包>]
内容:请参阅捆绑包说明(见下文)
注意:对于摄像头、成像器或扫描器,传入数据源是“扫描器”


条码捆绑包

捆绑包名称:"com.symbol.datawedge.barcodes"

参数

名称:"com.symbol.datawedge.label_type"
类型:[字符串]
内容:条码标签类型、原始码制(即“EAN128”)


名称:"com.symbol.datawedge.decode_data"
类型:[字节 [ ] ]
内容:作为字节数组的已获取的原始(未修改)数据


名称:"com.symbol.datawedge.data_string"
类型:[字符串]
内容:已获取的条码字符
示例:"abcde12345"


记号化数据捆绑包

捆绑包名称:"com.symbol.datawedge.tokenized_data"

参数

名称:"token_id"
类型:[字符串]
内容:UDI 定义的标签中的数据
可能的值:(请参阅下面的令牌 ID)


名称:"token_data_type"
类型:[字符串]
内容:传入数据类型
示例:日期、长整型、字符串


名称:"token_format"
类型:[字符串]
内容:传入字符串的格式
示例:YYYYMMDD


名称:"token_string_data"
类型:[字符串]
内容:已获取的条码字符
示例:"abcde12345"


名称:"token_binary_data"
类型:[字节 [ ] ]
内容:作为字节数组的已获取的条码数据


令牌 ID

令牌 ID:di
显示名称:设备标识符


令牌 ID:manufacturing_date_original
显示名称:制造日期


令牌 ID:expiration_date_original
显示名称:到期日期


令牌 ID:lot_number
显示名称:批号


令牌 ID:serial_number
显示名称:序列号


令牌 ID:mpho_lot_number
显示名称:人源性医疗产品 (MPHO) 批号


令牌 ID:donation_id
显示名称:捐赠 ID 号


令牌 ID:labeler_identification_code
显示名称:打标机 ID 代码


令牌 ID:product_or_catalog_number
显示名称:产品或目录号


令牌 ID:unit_of_measure_id
显示名称:度量单位 ID


令牌 ID:数量
显示名称:数量


其他解码标签

可以使用特定字符串标签来检索添加到 Intent 捆绑包的解码相关数据。在下面部分中使用下面带字符串标签的代码。

Intent.getStringExtra()

标签:LABEL_TYPE_TAG
类型:[字符串]
名称:"com.symbol.datawedge.label_type"
内容:条码标签类型
示例:"LABEL-TYPE-EAN128"


标签:DATA_STRING_TAG
类型:[字符串]
名称:"com.symbol.datawedge.data_string"
内容:已获取的条码字符
示例:"abcde12345"

注意:同时获取多个条码时,级联已解码的数据,并将其作为单一字符串发出。


标签:DECODE_DATA_TAG
类型:[字节 [ ] ]
名称:"com.symbol.datawedge.decode_data"
内容:将已解码数据返回为字节数组的列表。

注意:在大多数情况下,每个解码都会有一个字节数组。


另请参阅


其他 DataWedge 输出选项

  • 按键 - 输出已获取的数据,如同按下键盘
  • Internet 协议 - 使用 TCP 或 UDP 通过网络输出数据

相关指南