新聞資訊
Intent Output 允許 DataWedge 獲取和處理的數(shù)據(jù)作為 Android Intent 對象內(nèi)的有效負載發(fā)送到關(guān)聯(lián)的前臺應(yīng)用程序。這允許以編程方式將獲取的數(shù)據(jù)傳遞到應(yīng)用程序,在應(yīng)用程序中可以使用或進一步處理數(shù)據(jù)。應(yīng)用程序的核心組件(其活動、服務(wù)和廣播接收器)也可以通過Intent 激活,許多 DataWedge 功能也可以通過 DataWedge API激活。
Intent 對象是描述所需操作的一組信息。它包括要執(zhí)行操作的數(shù)據(jù)、應(yīng)執(zhí)行操作的組件類別以及其他相關(guān)數(shù)據(jù)和/或指令。當發(fā)起Intent 時,Android 會找到適當?shù)慕M件來響應(yīng)該Intent ,啟動該組件的新實例(如果需要),并將Intent 對象傳遞給它。
組件通過Intent 過濾器宣傳它們的功能(它們可以響應(yīng)的Intent 類型)。由于系統(tǒng)必須在啟動組件之前了解組件可以處理哪些Intent ,因此Intent 過濾器在應(yīng)用程序的AndroidManifest.xml文件中指定為 <intent-filter> 元素。一個組件可以有任意數(shù)量的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 還可以在應(yīng)用任何編碼器之前以原始形式輸出采集的數(shù)據(jù)。如果需要自定義編碼器來獲取 Zebra 不支持的字符集,這會很有用。
使用Intent 額外以字節(jié)流形式接收原始數(shù)據(jù)com.symbol.datawedge.decode_data。請參閱下面的單解碼模式部分。
***原始數(shù)據(jù)無法作為按鍵輸出。
DataWedge 通過Intent 類別中的Intent 操作調(diào)用 Intent ,如其文件中所述。AndroidManifest.xml
當組合時,這兩個值就像一個“通道”,應(yīng)用程序可以監(jiān)聽使用相同組合的Intent ,過濾掉使用不同值對的其他Intent 中的“噪音”。一旦知道這些值,DataWedge Intent 輸出必須設(shè)置為 match。
組件信息指定指定接收Intent 數(shù)據(jù)的應(yīng)用程序的包名稱和簽名。這增加了一定程度的安全性,以保證數(shù)據(jù)僅傳遞到預(yù)期的應(yīng)用程序。如果使用 DataWedge內(nèi)容提供程序,則只有指定的包名稱才能查詢內(nèi)容提供程序。
指定包名稱后,DataWedge 僅向包名稱發(fā)送顯式Intent 。或者,啟用應(yīng)用程序簽名檢查可以為Intent 傳遞增加另一個級別的安全性。DataWedge 在發(fā)送Intent 之前匹配應(yīng)用程序的簽名。如果簽名不匹配,DataWedge 不會發(fā)送Intent 。如果未啟用簽名檢查,DataWedge 將根據(jù)包名稱發(fā)送顯式Intent 。
例如,如果在沒有簽名檢查的情況下將程序包名稱指定為“com.zebra.app1”,則可以使用相同的程序包名稱創(chuàng)建另一個應(yīng)用程序并偽裝成原始應(yīng)用程序 - 可以在設(shè)備上卸載原始應(yīng)用程序并使用新的應(yīng)用程序可以安裝惡意應(yīng)用程序作為替代品。這會導(dǎo)致Intent 數(shù)據(jù)被傳遞給惡意應(yīng)用程序。相反,如果對原應(yīng)用程序啟用了簽名檢查,即使新應(yīng)用程序具有相同的包名,但簽名不同,因此無法將Intent 數(shù)據(jù)傳遞給惡意應(yīng)用程序。
使用內(nèi)容提供程序選項允許應(yīng)用程序利用 DataWedge 的內(nèi)容提供程序從大于 500 KB 的文件(例如圖像)檢索掃描數(shù)據(jù),主要使用 Signature Capture 和 NextGen SimulScan。內(nèi)容提供程序是一個 Android 應(yīng)用程序組件,它封裝了要在應(yīng)用程序之間共享的數(shù)據(jù)。
這些功能的參數(shù)可以通過 UI 或使用Set Config API進行配置。
有關(guān)詳細信息,請參閱使用內(nèi)容提供程序程序員指南。
重要提示:對于直接輸出到活動的掃描應(yīng)用程序,該活動必須在應(yīng)用程序文件中指定為“singleTop”
AndroidManifest.xml。如果無法以這種方式指定活動,將導(dǎo)致每次解碼時都會啟動該活動的實例,并將獲取的數(shù)據(jù)發(fā)送到每個新生成的實例。
要使用Intent 輸出選項,配置 DataWedge:
1. 找到正在配置的配置文件的Intent 輸出部分。
2. 選中“已啟用”框以激活“Intent 輸出”:

3. 指定操作、類別和交付,如下所述:
Intent 操作 -指定處理Intent 的操作
Intent 類別 -指定要處理的Intent 類別
Intent 交付 -用于為基于Intent 的數(shù)據(jù)選擇四種交付方法之一:
通過 startActivity 發(fā)送 -調(diào)用 startActivity() Android API 來傳送數(shù)據(jù)。
通過 startService 發(fā)送 -使用 Android 的 startService() API 傳送數(shù)據(jù)。僅當您的應(yīng)用程序/服務(wù)是針對 Android SDK 版本 25 或更低版本編譯時,才建議使用此方法。如果您的應(yīng)用程序/服務(wù)是針對 SDK 版本 26 或更高版本編譯的,則 startService() 選項不起作用。參考startService Android開發(fā)者文章。
通過 startForegroundService 發(fā)送 -調(diào)用 startForegroundService() Android API 來傳遞數(shù)據(jù)。此選項適用于 Android Oreo (v8.0) 及更高版本。僅當您的應(yīng)用程序/服務(wù)是針對 Android SDK 版本 30 或更低版本編譯時,才建議使用此方法。如果您的應(yīng)用程序/服務(wù)是針對 SDK 版本 31 或更高版本編譯的,則 startForegroundService() 選項不起作用。參考startService Android開發(fā)者文章。
廣播Intent - 可以設(shè)置接收者前臺標志,授予廣播接收者以更短的超時間隔以前臺優(yōu)先級運行的權(quán)限。 Zebra 建議僅在設(shè)備啟動后立即發(fā)送Intent 時出現(xiàn)延遲時才使用此標志。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 的對象時,會同時從多個條形碼獲取數(shù)據(jù)并作為多解碼包輸出,這與單解碼包不同。DataWedge 還可以在一次掃描中獲取多個非 UDI 條形碼。本節(jié)適用于兩種模式。
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 包中的與解碼相關(guān)的數(shù)據(jù)。將下面的代碼與接下來的部分中的字符串標記一起使用。
Intent.getStringExtra()標簽:LABEL_TYPE_TAG
類型:[字符串]
名稱:“com.symbol.datawedge.label_type”
內(nèi)容:條形碼標簽類型
示例:“LABEL-TYPE-EAN128”
標簽:DATA_STRING_TAG
類型:[String]
名稱:“com.symbol.datawedge.data_string”
內(nèi)容:獲取的條形碼字符
示例:“abcde12345”
注意:當同時采集多個條形碼時,解碼數(shù)據(jù)將連接起來并作為單個字符串發(fā)送出去。
標簽:DECODE_DATA_TAG
類型:[byte []]
名稱:“com.symbol.datawedge.decode_data”
內(nèi)容:以字節(jié)數(shù)組列表形式返回的解碼數(shù)據(jù)。
注意:在大多數(shù)情況下,每次解碼都會有一個字節(jié)數(shù)組。