Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette rubrique explique comment obtenir des données à partir d’un scanneur de codes-barres dans un objet BarcodeScannerReport et comprendre son format et son contenu.
Une fois que vous avez configuré votre scanneur de codes-barres et scannez un code-barres, l’événement DataReceived est déclenché. Le ClaimedBarcodeScanner doit s’abonner à cet événement. L’événement DataReceived transmet un objet BarcodeScannerDataReceivedEventArgs , que vous pouvez utiliser pour accéder aux données de code-barres.
S’abonner à l’événement DataReceived
Une fois que vous avez un ClaimedBarcodeScanner, utilisez-le pour vous abonner à l’événement DataReceived :
claimedBarcodeScanner.DataReceived += ClaimedBarcodeScanner_DataReceived;
Le gestionnaire d’événements recevra le ClaimedBarcodeScanner et un objet BarcodeScannerDataReceivedEventArgs. Vous pouvez accéder aux données de code-barres via la propriété Report de cet objet, qui est de type Code-barresScannerReport.
private async void ClaimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
// Parse the data
}
Obtenir les données
Une fois que vous disposez du BarcodeScannerReport, vous pouvez accéder aux données de code-barres et les analyser. RapportScannerDeCodeBarres a trois propriétés :
- ScanData : données de code-barres brutes complètes.
- ScanDataLabel : étiquette de code-barres décodée, qui n’inclut pas l’en-tête, la somme de contrôle et d’autres informations diverses.
- ScanDataType: Type d’étiquette de code-barres décodé. Les valeurs possibles sont définies dans la classe BarcodeSymbologies .
Si vous souhaitez accéder à ScanDataLabel ou à ScanDataType, vous devez d’abord définir IsDecodeDataEnabled sur vrai.
claimedBarcodeScanner.IsDecodeDataEnabled = true;
Obtenir le type de données d’analyse
L’obtention du type d’étiquette de code-barres décodé est assez triviale , nous appelons simplement GetName sur ScanDataType.
private string GetSymbology(BarcodeScannerDataReceivedEventArgs args)
{
return BarcodeSymbologies.GetName(args.Report.ScanDataType);
}
Obtenir l’étiquette de données de numérisation
Pour obtenir l’étiquette de code-barres décodée, vous devez connaître quelques éléments. Seuls certains types de données contiennent du texte encodé. Vous devez donc d’abord vérifier si le symbology peut être converti en chaîne, puis convertir la mémoire tampon que nous obtenons de ScanDataLabel en chaîne UTF-8 encodée.
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.";
}
}
Obtenir les données d’analyse brutes
Pour obtenir les données brutes complètes du code-barres, nous convertissons simplement la mémoire tampon que nous obtenons de ScanData en chaîne.
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);
}
}
Ces données sont généralement dans le format remis à partir du scanneur. Les informations d’en-tête et de bande-annonce de message sont supprimées, mais elles ne contiennent pas d’informations utiles pour une application et sont susceptibles d’être spécifiques au scanneur.
Les informations d’en-tête courantes sont un caractère de préfixe (par exemple, un caractère STX). Les informations de terminaison courantes incluent un caractère de fin (par exemple, un caractère ETX ou CR) et un caractère de vérification de bloc si le scanner en génère un.
Cette propriété doit inclure un caractère symbolographique si l’un est retourné par le scanneur (par exemple, un A pour UPC-A). Il doit également inclure des chiffres de vérification s’ils sont présents dans l’étiquette et retournés par le scanneur. (Notez que les caractères symbolographiques et les chiffres de vérification peuvent ou ne pas être présents, selon la configuration du scanneur. Le scanneur les retourne s’ils sont présents, mais ne les génère pas ou ne les calculent pas s’ils sont absents.)
Certaines marchandises peuvent être marquées avec un code-barres supplémentaire. Ce code-barres est généralement placé à droite du code-barres principal et se compose d’un nombre supplémentaire de deux ou cinq caractères d’informations. Si le scanneur lit les marchandises qui contiennent des codes-barres principaux et supplémentaires, les caractères supplémentaires sont ajoutés aux caractères principaux et le résultat est remis à l’application sous forme d’une étiquette. (Notez qu’un scanneur peut prendre en charge une configuration qui active ou désactive la lecture des codes supplémentaires.)
Certaines marchandises peuvent être marquées avec plusieurs étiquettes, parfois appelées étiquettes multisymbol ou étiquettes hiérarchisés. Ces codes-barres sont généralement disposés verticalement et peuvent être de la même ou de la même symbologie. Si le scanneur lit la marchandise qui contient plusieurs étiquettes, chaque code-barres est remis à l’application en tant qu’étiquette distincte. Cela est nécessaire en raison de l’absence actuelle de normalisation de ces types de codes-barres. Il n’est pas possible de déterminer toutes les variantes en fonction des données de code-barres individuelles. Par conséquent, l’application doit déterminer quand un code-barres d’étiquette multiple a été lu en fonction des données retournées. (Notez qu’un scanneur peut ou non prendre en charge la lecture de plusieurs étiquettes.)
Cette valeur est définie avant qu'un événement DataReceived soit élevé à l’application.
Support et commentaires
Trouver des réponses à vos questions
Vous avez des questions ? Demandez-nous sur notre forum Docs Q&A avec la balise UWP ou sur Stack Overflow avec la balise pointofservice.
Aidez-nous à trouver vos questions :
- Ajoutez la balise pointofservice à votre question sur Stack Overflow.
- Incluez le terme « UWP » dans votre billet sur le forum Q&A