共用方式為


取得並了解條碼資料

本主題描述如何從 BarcodeScannerReport 物件中的條碼掃描器取得資料,並了解其格式和內容。

設定條碼掃描器並掃描條碼之後,就會引發 DataReceived 事件。 ClaimedBarcodeScanner 應該訂閱此事件。 DataReceived 事件會傳遞 BarcodeScannerDataReceivedEventArgs 物件,您可以使用此物件來存取條碼資料。

訂閱 DataReceived 事件

擁有 ClaimedBarcodeScanner 之後,請使用它來訂閱 DataReceived 事件:

claimedBarcodeScanner.DataReceived += ClaimedBarcodeScanner_DataReceived;

事件處理常式將會傳遞 ClaimedBarcodeScannerBarcodeScannerDataReceivedEventArgs 物件。 您可以透過此物件的 Report 屬性來存取條碼資料,該屬性的類型為 BarcodeScannerReport

private async void ClaimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
    // Parse the data
}

取得資料

一旦您擁有 BarcodeScannerReport,您就可以存取及剖析條碼資料。 BarcodeScannerReport 有三個屬性:

如果您想要存取 ScanDataLabelScanDataType,您必須先將 IsDecodeDataEnabled 設定為 true

claimedBarcodeScanner.IsDecodeDataEnabled = true;

取得掃描資料類型

取得譯碼的條碼捲標類型相當簡單,我們只是在 ScanDataType 上呼叫 GetName

private string GetSymbology(BarcodeScannerDataReceivedEventArgs args)
{
    return BarcodeSymbologies.GetName(args.Report.ScanDataType);
}

取得掃描資料標籤

若要取得已譯碼的條碼卷標,您必須注意一些事項。 只有特定資料類型包含編碼的文字,因此您應該先檢查符號是否可轉換成字元串,然後將我們從 ScanDataLabel 取得的緩衝區轉換成編碼的 UTF-8 字串。

private string GetDataLabel(BarcodeScannerDataReceivedEventArgs args)
{
    uint scanDataType = args.Report.ScanDataType;

    // Only certain data types contain encoded text.
    // To keep this simple, we'll just decode a few of them.
    if (args.Report.ScanDataLabel == null)
    {
        return "No data";
    }

    // This is not an exhaustive list of symbologies that can be converted to a string.
    else if (scanDataType == BarcodeSymbologies.Upca ||
        scanDataType == BarcodeSymbologies.UpcaAdd2 ||
        scanDataType == BarcodeSymbologies.UpcaAdd5 ||
        scanDataType == BarcodeSymbologies.Upce ||
        scanDataType == BarcodeSymbologies.UpceAdd2 ||
        scanDataType == BarcodeSymbologies.UpceAdd5 ||
        scanDataType == BarcodeSymbologies.Ean8 ||
        scanDataType == BarcodeSymbologies.TfStd)
    {
        // The UPC, EAN8, and 2 of 5 families encode the digits 0..9
        // which are then sent to the app in a UTF8 string (like "01234").
        return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanDataLabel);
    }

    // Some other symbologies (typically 2-D symbologies) contain binary data that
    // should not be converted to text.
    else
    {
        return "Decoded data unavailable.";
    }
}

取得原始掃描資料

若要從條碼取得完整的原始資料,我們只需將從 ScanData 取得的緩衝區轉換成字串。

private string GetRawData(BarcodeScannerDataReceivedEventArgs args)
{
    // Get the full, raw barcode data.
    if (args.Report.ScanData == null)
    {
        return "No data";
    }

    // Just to show that we have the raw data, we'll print the value of the bytes.
    else
    {
        return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanData);
    }
}

此資料通常採用掃描器傳送的格式。 然而,訊息標頭和尾部資訊被刪除,因為它們不包含對應用程式有用的容器化應用程式,並且可能是特定於掃描器的。

常見的頭資訊是前綴字元 (如 STX 字元)。 常見的尾部資訊是終止符 (例如 ETX 或 CR 字元) 和區塊校驗字元 (如果掃描器產生的話)。

如果掃描儀傳回符號制字元,這個屬性應該包含符號符號字元 (例如,適用於 SCD-A 的 A。 如果它們存在於標籤中,並由掃描器傳回,它也應該包含檢查數位。 (請注意,符號系統字元和校驗位可能存在也可能不存在,具體取決於掃描器配置。如果存在,掃描器將傳回它們,但如果不存在,則不會產生或計算它們。)

有些商品可能標有補充條碼。 此條碼通常放置在主條碼的右側,並包含額外的兩個或五個字元的資訊。 如果掃描器讀取同時包含主條碼和補充條碼的商品,則補充字元將附加到主要字元上,並將結果作為一個標籤傳送到應用程式。 (請注意,掃描器可能支援啟用或停用補充代碼讀取的配置。)

某些商品可能會標示為多個標籤,有時稱為多品牌標籤分層標籤。 這些條碼通常垂直排列,並且可以具有相同或不同的符號體系。 如果掃描器讀取包含多個標籤的商品,則每個條碼都會作為單獨的標籤傳送到應用程式。 這是必要的,因為目前缺乏這些條碼類型的標準化。 無法根據個別條碼資料來判斷所有變化。 因此,應用程式需要根據傳回的資料確定何時讀取多標籤條碼。 (請注意,掃描器可能支援也可能不支援讀取多個標籤。)

此值是在引發至應用程式的 DataReceived 事件之前設定。

支援和意見反應

尋找您的問題解答

有任何疑問嗎? 在具有UWP標籤的 Docs Q&A 論壇上,或使用 pointofservice 標籤在 Stack Overflow 上詢問我們。

協助我們找出您的問題:

另請參閱