新闻资讯
Intent Output 允许 DataWedge 获取和处理的数据作为 Android Intent 对象内的有效负载发送到关联的前台应用程序。这允许以编程方式将获取的数据传递到应用程序,在应用程序中可以使用或进一步处理数据。应用程序的核心组件(其活动、服务和广播接收器)也可以通过Intent 激活,许多 DataWedge 功能也可以通过 DataWedge API激活。
Intent 对象是描述所需操作的一组信息。它包括要执行操作的数据、应执行操作的组件类别以及其他相关数据和/或指令。当发起Intent 时,Android 会找到适当的组件来响应该Intent ,启动该组件的新实例(如果需要),并将Intent 对象传递给它。
组件通过Intent 过滤器宣传它们的功能(它们可以响应的Intent 类型)。由于系统必须在启动组件之前了解组件可以处理哪些Intent ,因此Intent 过滤器在应用程序的AndroidManifest.xml
文件中指定为 <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
com.symbol.datawedge.data_string
除了正常的纯文本和十六进制模式之外,DataWedge 还可以在应用任何编码器之前以原始形式输出采集的数据。如果需要自定义编码器来获取 Zebra 不支持的字符集,这会很有用。
使用Intent 额外以字节流形式接收原始数据com.symbol.datawedge.decode_data
。请参阅下面的单解码模式部分。
***原始数据无法作为按键输出。
DataWedge 通过Intent 类别中的Intent 操作调用 Intent ,如其文件中所述。AndroidManifest.xml
当组合时,这两个值就像一个“通道”,应用程序可以监听使用相同组合的Intent ,过滤掉使用不同值对的其他Intent 中的“噪音”。一旦知道这些值,DataWedge Intent 输出必须设置为 match。
组件信息指定指定接收Intent 数据的应用程序的包名称和签名。这增加了一定程度的安全性,以保证数据仅传递到预期的应用程序。如果使用 DataWedge内容提供程序,则只有指定的包名称才能查询内容提供程序。
指定包名称后,DataWedge 仅向包名称发送显式Intent 。或者,启用应用程序签名检查可以为Intent 传递增加另一个级别的安全性。DataWedge 在发送Intent 之前匹配应用程序的签名。如果签名不匹配,DataWedge 不会发送Intent 。如果未启用签名检查,DataWedge 将根据包名称发送显式Intent 。
例如,如果在没有签名检查的情况下将程序包名称指定为“com.zebra.app1”,则可以使用相同的程序包名称创建另一个应用程序并伪装成原始应用程序 - 可以在设备上卸载原始应用程序并使用新的应用程序可以安装恶意应用程序作为替代品。这会导致Intent 数据被传递给恶意应用程序。相反,如果对原应用程序启用了签名检查,即使新应用程序具有相同的包名,但签名不同,因此无法将Intent 数据传递给恶意应用程序。
使用内容提供程序选项允许应用程序利用 DataWedge 的内容提供程序从大于 500 KB 的文件(例如图像)检索扫描数据,主要使用 Signature Capture 和 NextGen SimulScan。内容提供程序是一个 Android 应用程序组件,它封装了要在应用程序之间共享的数据。
这些功能的参数可以通过 UI 或使用Set Config API进行配置。
有关详细信息,请参阅使用内容提供程序程序员指南。
重要提示:对于直接输出到活动的扫描应用程序,该活动必须在应用程序文件中指定为“singleTop”
AndroidManifest.xml
。如果无法以这种方式指定活动,将导致每次解码时都会启动该活动的实例,并将获取的数据发送到每个新生成的实例。
要使用Intent 输出选项,配置 DataWedge:
1. 找到正在配置的配置文件的Intent 输出部分。
2. 选中“已启用”框以激活“Intent 输出”:
3. 指定操作、类别和交付,如下所述:
Intent 操作 -指定处理Intent 的操作
Intent 类别 -指定要处理的Intent 类别
Intent 交付 -用于为基于Intent 的数据选择四种交付方法之一:
通过 startActivity 发送 -调用 startActivity() Android API 来传送数据。
通过 startService 发送 -使用 Android 的 startService() API 传送数据。仅当您的应用程序/服务是针对 Android SDK 版本 25 或更低版本编译时,才建议使用此方法。如果您的应用程序/服务是针对 SDK 版本 26 或更高版本编译的,则 startService() 选项不起作用。参考startService Android开发者文章。
通过 startForegroundService 发送 -调用 startForegroundService() Android API 来传递数据。此选项适用于 Android Oreo (v8.0) 及更高版本。仅当您的应用程序/服务是针对 Android SDK 版本 30 或更低版本编译时,才建议使用此方法。如果您的应用程序/服务是针对 SDK 版本 31 或更高版本编译的,则 startForegroundService() 选项不起作用。参考startService Android开发者文章。
广播Intent - 可以设置接收者前台标志,授予广播接收者以更短的超时间隔以前台优先级运行的权限。 Zebra 建议仅在设备启动后立即发送Intent 时出现延迟时才使用此标志。Intent.FLAG_RECEIVER_FOREGROUND
*** 普通就选择广播Intent 方式
单模式一次读取和解码一个条形码,是最常见的解码模式。要同时解码多个条形码(例如使用符合 UDI 的对象),请参阅UDI/多重解码模式。
Name: "com.symbol.datawedge.source"
Type: [String]
Contents: Source of incoming data
Possible values:
"msr"
"scanner"
"simulscan"
"serial"
"voice"
"rfid"
NOTE: Source of incoming data is "scanner" for camera, imager or scanner.
Name: "com.symbol.datawedge.label_type"
Type: [String]
Contents: Barcode label type (i.e. "EAN128")
Possible values:
"LABEL-TYPE-CODE39"
"LABEL-TYPE-CODABAR"
"LABEL-TYPE-CODE128"
"LABEL-TYPE-D2OF5"
"LABEL-TYPE-IATA2OF5"
"LABEL-TYPE-I2OF5"
"LABEL-TYPE-CODE93"
"LABEL-TYPE-UPCA"
"LABEL-TYPE-UPCE0"
"LABEL-TYPE-UPCE1"
"LABEL-TYPE-EAN8"
"LABEL-TYPE-EAN13"
"LABEL-TYPE-MSI"
"LABEL-TYPE-EAN128"
"LABEL-TYPE-TRIOPTIC39"
"LABEL-TYPE-BOOKLAND"
"LABEL-TYPE-COUPON"
"LABEL-TYPE-DATABAR-COUPON"
"LABEL-TYPE-ISBT128"
"LABEL-TYPE-CODE32"
"LABEL-TYPE-PDF417"
"LABEL-TYPE-MICROPDF"
"LABEL-TYPE-TLC39"
"LABEL-TYPE-CODE11"
"LABEL-TYPE-MAXICODE"
"LABEL-TYPE-DATAMATRIX"
"LABEL-TYPE-QRCODE"
"LABEL-TYPE-GS1-DATABAR"
"LABEL-TYPE-GS1-DATABAR-LIM"
"LABEL-TYPE-GS1-DATABAR-EXP"
"LABEL-TYPE-USPOSTNET"
"LABEL-TYPE-USPLANET"
"LABEL-TYPE-UKPOSTAL"
"LABEL-TYPE-JAPPOSTAL"
"LABEL-TYPE-AUSPOSTAL"
"LABEL-TYPE-DUTCHPOSTAL"
"LABEL-TYPE-FINNISHPOSTAL-4S"
"LABEL-TYPE-CANPOSTAL"
"LABEL-TYPE-CHINESE-2OF5"
"LABEL-TYPE-AZTEC"
"LABEL-TYPE-MICROQR"
"LABEL-TYPE-US4STATE"
"LABEL-TYPE-US4STATE-FICS"
"LABEL-TYPE-COMPOSITE-AB"
"LABEL-TYPE-COMPOSITE-C"
"LABEL-TYPE-WEBCODE"
"LABEL-TYPE-SIGNATURE"
"LABEL-TYPE-KOREAN-3OF5"
"LABEL-TYPE-MATRIX-2OF5"
"LABEL-TYPE-OCR"
"LABEL-TYPE-HANXIN"
"LABEL-TYPE-MAILMARK"
"MULTICODE-DATA-FORMAT"
"LABEL-TYPE-GS1-DATAMATRIX"
"LABEL-TYPE-GS1-QRCODE"
"LABEL-TYPE-DOTCODE"
"LABEL-TYPE-GRIDMATRIX"
"LABEL-TYPE-UNDEFINED"
Name: "com.symbol.datawedge.data_string"
Type: [String]
Contents: Acquired barcode characters
Example: "abcde12345"
Name: "com.symbol.datawedge.decode_data"
Type: [List <byte [ ]>]
Contents: Acquired raw (unmodified) data as an array list of byte arrays
Example: List_Item_1(array_1(byte11,byte12,byte13)),List_Item_2(array_2(byte21,byte22,byte23)) ...
Sample code:
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]);
}
Name: "com.symbol.datawedge.decoded_mode"
Type: [String]
Contents: Mode used to decode the incoming data
Possible values:
"multiple_decode"
"single_decode"
解码符合 UDI 的对象时,会同时从多个条形码获取数据并作为多解码包输出,这与单解码包不同。DataWedge 还可以在一次扫描中获取多个非 UDI 条形码。本节适用于两种模式。
Name: "com.symbol.datawedge.decode_mode"
Type: [String]
Contents: Mode used to decode incoming data
Possible values:
"multiple_decode"
"single_decode"
Name: "com.symbol.datawedge.smart_decode_type"
Type: [String]
Contents: Decode type
Possible values:
“udi”
“multibarcode”
Name: "com.symbol.datawedge.data_string"
Type: [String]
Contents: Acquired barcode characters
Example: "abcde12345"
Name: "com.symbol.datawedge.decode_data"
Type: [List <byte [ ]>]
Contents: Acquired raw (unmodified) data as an array list of byte arrays
Example: List_Item_1(array_1(byte11,byte12,byte13)), List_Item_2(array_2(byte21,byte22,byte23)) ...
Name: "com.symbol.datawedge.source"
Type: [String]
Contents: Source of incoming data
Possible values:
"msr"
"scanner"
"simulscan"
Name: "com.symbol.datawedge.label_id"
Type: [String]
Contents: UDI type of incoming data
Possible values:
“UDI_HIBCC”
“UDI_GS1”
“UDI_ICCBBA”
“UNDEFINED”
Name: "com.symbol.datawedge.barcodes"
Type: [List <Bundle>]
Contents: See Bundle description (below)
Name: "com.symbol.datawedge.tokenized_data"
Type: [List <Bundle>]
Contents: See Bundle description (below)
Note: Source of incoming data is "scanner" for camera, imager or scanner
Name: "com.symbol.datawedge.label_type"
Type: [String]
Contents: Barcode label type, original symbology (i.e. "EAN128")
Name: "com.symbol.datawedge.decode_data"
Type: [byte [ ] ]
Contents: Acquired raw (unmodified) data as a byte array
Name: "com.symbol.datawedge.data_string"
Type: [String]
Contents: Acquired barcode characters
Example: "abcde12345"
Name: "token_id"
Type: [String]
Contents: Data in a UDI-defined tag
Possible values: (see token IDs, below)
Name: "token_data_type"
Type: [String]
Contents: Incoming data type
Example: date, long, string
Name: "token_format"
Type: [String]
Contents: Format of incoming string
Example: YYYYMMDD
Name: "token_string_data"
Type: [String]
Contents: Acquired barcode characters
Example: "abcde12345"
Name: "token_binary_data"
Type: [byte [ ] ]
Contents: Acquired barcode data as a byte array
Token ID: di
Display Name: Device identifier
Token ID: manufacturing_date_original
Display Name: Manufacturing date
Token ID: expiration_date_original
Display Name: Expiration date
Token ID: lot_number
Display Name: Lot number
Token ID: serial_number
Display Name: Serial number
Token ID: mpho_lot_number
Display Name: Medical products of human origin (MPHO) lot number
Token ID: donation_id
Display Name: Donation ID number
Token ID: labeler_identification_code
Display Name: Labeler ID code
Token ID: product_or_catalog_number
Display Name: Product or catalog number
Token ID: unit_of_measure_id
Display Name: Unit of measure ID
Token ID: Quantity
Display Name: Quantity
可以使用特定的字符串标签来检索添加到Intent 包中的与解码相关的数据。将下面的代码与接下来的部分中的字符串标记一起使用。
Intent.getStringExtra()
标签:LABEL_TYPE_TAG
类型:[字符串]
名称:“com.symbol.datawedge.label_type”
内容:条形码标签类型
示例:“LABEL-TYPE-EAN128”
标签:DATA_STRING_TAG
类型:[String]
名称:“com.symbol.datawedge.data_string”
内容:获取的条形码字符
示例:“abcde12345”
注意:当同时采集多个条形码时,解码数据将连接起来并作为单个字符串发送出去。
标签:DECODE_DATA_TAG
类型:[byte []]
名称:“com.symbol.datawedge.decode_data”
内容:以字节数组列表形式返回的解码数据。
注意:在大多数情况下,每次解码都会有一个字节数组。