Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Thema wird beschrieben, wie Sie Daten von einem Strichcodescanner in einem BarcodeScannerReport- -Objekt abrufen und dessen Format und Inhalt verstehen.
Nachdem Sie Ihren Barcode-Scanner eingerichtet und einen Barcode gescannt haben, wird das Ereignis DataReceived ausgelöst. Der ClaimedBarcodeScanner soll dieses Ereignis abonnieren. Das DataReceived-Ereignis übergibt ein BarcodeScannerDataReceivedEventArgs-Objekt, mit dem Sie auf die Barcodedaten zugreifen können.
Abonnieren Sie das DataReceived-Ereignis
Nachdem Sie einen ClaimedBarcodeScanner-besitzen, nutzen Sie ihn, um das DataReceived--Ereignis zu abonnieren.
claimedBarcodeScanner.DataReceived += ClaimedBarcodeScanner_DataReceived;
Der Ereignishandler erhält den ClaimedBarcodeScanner und ein BarcodeScannerDataReceivedEventArgs-Objekt. Sie können über die Report-Eigenschaft dieses Objekts auf die Barcodedaten zugreifen, die vom Typ BarcodeScannerReportist.
private async void ClaimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
// Parse the data
}
Daten abrufen
Sobald Sie BarcodeScannerReport-haben, können Sie auf die Barcodedaten zugreifen und diese parsen. BarcodeScannerReport hat drei Eigenschaften:
- ScanData-: Die vollständigen Barcodedaten im Rohformat.
- ScanDataLabel: Das decodierte Barcode-Label, das keine Kopfzeile, keine Prüfsumme und keine anderen sonstigen Informationen enthält.
- ScanDataType: Der decodierte Barcode-Bezeichnungstyp. Mögliche Werte werden in der BarcodeSymbologies Klasse definiert.
Wenn Sie auf ScanDataLabel oder ScanDataType-zugreifen möchten, müssen Sie zuerst IsDecodeDataEnabled- auf truefestlegen.
claimedBarcodeScanner.IsDecodeDataEnabled = true;
Scan-Datentyp abrufen
Das Abrufen des Typs des decodierten Barcode-Etiketts ist ziemlich trivial – wir rufen einfach GetName- auf ScanDataType-auf.
private string GetSymbology(BarcodeScannerDataReceivedEventArgs args)
{
return BarcodeSymbologies.GetName(args.Report.ScanDataType);
}
Scandatenbezeichnung abrufen
Um die decodierte Barcodebezeichnung zu erhalten, gibt es ein paar Dinge, die Sie beachten müssen. Nur bestimmte Datentypen enthalten codierten Text, daher sollten Sie zuerst überprüfen, ob die Symbologie in eine Zeichenfolge konvertiert werden kann, und dann den Puffer konvertieren, den wir von ScanDataLabel- in eine codierte UTF-8-Zeichenfolge abrufen.
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.";
}
}
Rohe Scandaten abrufen
Um die vollständigen Rohdaten aus dem Barcode zu erhalten, konvertieren wir einfach den Puffer, den wir von ScanData in eine Zeichenfolge abrufen.
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);
}
}
Diese Daten befinden sich in der Regel im Format, das vom Scanner bereitgestellt wird. Nachrichtenkopf- und Trailerinformationen werden jedoch entfernt, da sie keine nützlichen Informationen für eine Anwendung enthalten und wahrscheinlich scannerspezifisch sind.
Übliche Kopfzeileninformationen sind ein Präfixzeichen (wie zum Beispiel ein STX-Zeichen). Allgemeine Informationen zu Trailern umfassen ein Terminatorzeichen (z. B. ein ETX- oder CR-Zeichen) und ein Blockprüfzeichen, wenn eines vom Scanner generiert wird.
Diese Eigenschaft sollte ein Symbologiezeichen enthalten, wenn eines vom Scanner zurückgegeben wird (z. B. ein A für UPC-A). Es sollte auch Prüfziffern enthalten, wenn sie im Etikett vorhanden sind und vom Scanner zurückgegeben werden. (Beachten Sie, dass sowohl Symbologiezeichen als auch Prüfziffern je nach Scannerkonfiguration möglicherweise vorhanden oder nicht vorhanden sind. Der Scanner gibt sie zurück, wenn vorhanden, aber nicht generiert oder berechnet, wenn sie nicht vorhanden sind.)
Einige Waren können mit einem zusätzlichen Barcode gekennzeichnet werden. Dieser Barcode wird in der Regel rechts vom Hauptstrichcode platziert und besteht aus zwei oder fünf zusätzlichen Zeichen mit Informationen. Wenn der Scanner Waren liest, die sowohl Haupt- als auch ergänzende Barcodes enthalten, werden die ergänzenden Zeichen an die Hauptzeichen angefügt, und das Ergebnis wird als ein Etikett an die Anwendung übermittelt. (Beachten Sie, dass ein Scanner eine Konfiguration unterstützen kann, die das Lesen von ergänzenden Codes aktiviert oder deaktiviert.)
Einige Waren können mit mehreren Etiketten gekennzeichnet werden, die manchmal als Multisymboletiketten oder gestufte Etikettenbezeichnet werden. Diese Barcodes sind in der Regel vertikal angeordnet und können der gleichen oder unterschiedlichen Symbologie entsprechen. Wenn der Scanner Ware liest, die mehrere Etiketten enthält, wird jeder Barcode als separates Etikett an die Anwendung übermittelt. Dies ist aufgrund des derzeitigen Mangels an Standardisierung dieser Barcodetypen notwendig. Man kann nicht alle Variationen basierend auf den einzelnen Barcodedaten ermitteln. Daher muss die Anwendung ermitteln, wann ein Barcode für mehrere Bezeichnungen basierend auf den zurückgegebenen Daten gelesen wurde. (Beachten Sie, dass ein Scanner das Lesen mehrerer Bezeichnungen möglicherweise unterstützt oder nicht unterstützt.)
Dieser Wert wird festgelegt, bevor ein DataReceived-Ereignis an die Anwendung gesendet wird.
Support und Feedback
Hier finden Sie Antworten auf Ihre Fragen
Haben Sie Fragen? Fragen Sie uns entweder in unserem Docs Q&A-Forum mit dem UWP-Tag oder auf Stack Overflow mit dem Pointofservice-Tag.
Helfen Sie uns, Ihre Fragen zu finden:
- Fügen Sie den pointofservice-Tag zu Ihrer Frage auf Stack Overflow hinzu.
- Fügen Sie den Begriff "UWP" in Ihren Beitrag in das F&A-Forum ein.