Utilisation des symbologies du scanneur de codes-barres
Cette rubrique explique comment utiliser les API de scanneur de code-barres plateforme Windows universelle (UWP) pour traiter les symbologies de code-barres sans configuration manuelle du scanneur.
Un symbologie de code-barres est le mappage des données à un format de code-barres spécifique. Certaines symbologies courantes incluent UPC, Code 128, Code QR, et ainsi de suite.
Déterminer les symbologies prises en charge
Étant donné que votre application peut être utilisée avec différents modèles de scanneur de codes-barres de plusieurs fabricants, vous pouvez interroger le scanneur pour déterminer la liste des symbologies qu’il prend en charge. Cela peut être utile si votre application nécessite une symbologie spécifique qui peut ne pas être prise en charge par tous les scanneurs ou si vous devez activer les symbologies qui ont été désactivées manuellement ou par programmation sur le scanneur.
Une fois que vous avez un objet BarcodeScanner à l’aide de BarcodeScanner.FromIdAsync, appelez GetSupportedSymbologiesAsync pour obtenir une liste de symbologies prises en charge par l’appareil.
L’exemple suivant obtient une liste des symbologies prises en charge du scanneur de code-barres et les affiche dans un bloc de texte :
private void DisplaySupportedSymbologies(BarcodeScanner barcodeScanner, TextBlock textBlock)
{
var supportedSymbologies = await barcodeScanner.GetSupportedSymbologiesAsync();
foreach (uint item in supportedSymbologies)
{
string symbology = BarcodeSymbologies.GetName(item);
textBlock.Text += (symbology + "\n");
}
}
Déterminer si une symbologie spécifique est prise en charge
Pour déterminer si le scanneur prend en charge une symbologie spécifique, vous pouvez appeler IsSymbologySupportedAsync.
L’exemple suivant vérifie si le scanneur de code-barres prend en charge la symbologie Code32 :
bool symbologySupported = await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32);
Modifier les symbologies reconnues
Dans certains cas, vous pouvez utiliser un sous-ensemble de symbologies pris en charge par le scanneur de code-barres. Cela est particulièrement utile pour bloquer les symbologies que vous n’avez pas l’intention d’utiliser dans votre application. Par exemple, pour vous assurer qu’un utilisateur analyse le code-barres approprié, vous pouvez limiter l’analyse à UPC ou EAN lors de l’acquisition des références SKU d’élément et limiter l’analyse au code 128 lors de l’acquisition de numéros de série.
Une fois que vous connaissez les symbologies que votre scanneur prend en charge, vous pouvez définir les symbologies que vous souhaitez reconnaître. Cette opération peut être effectuée après avoir établi un objet ClaimedBarcodeScanner à l’aide de ClaimScannerAsync. Vous pouvez appeler SetActiveSymbologiesAsync pour activer un ensemble spécifique de symbologies alors que ceux omis dans votre liste sont désactivés.
L’exemple suivant définit les symbologies actives d’un scanneur de codes-barres revendiqués sur Code39 et Code39Ex :
private async void SetSymbologies(ClaimedBarcodeScanner claimedBarcodeScanner)
{
var symbologies = new List<uint>{ BarcodeSymbologies.Code39, BarcodeSymbologies.Code39Ex };
await claimedBarcodeScanner.SetActiveSymbologiesAsync(symbologies);
}
Attributs symbologique de code-barres
Différents symboles de code-barres peuvent avoir différents attributs, tels que la prise en charge de plusieurs longueurs de décodage, la transmission du chiffre case activée à l’hôte dans le cadre des données brutes et la validation de chiffre case activée. Avec la classe BarcodeSymbologyAttributes, vous pouvez obtenir et définir ces attributs pour une symbologie ClaimedBarcodeScanner et une symbologie de code-barres donnés.
Vous pouvez obtenir les attributs d’un symbology donné avec GetSymbologyAttributesAsync. L’extrait de code suivant obtient les attributs des symbologies Upca pour un ClaimedBarcodeScanner.
BarcodeSymbologyAttributes barcodeSymbologyAttributes =
await claimedBarcodeScanner.GetSymbologyAttributesAsync(BarcodeSymbologies.Upca);
Une fois que vous avez terminé de modifier les attributs et que vous êtes prêt à les définir, vous pouvez appeler SetSymbologyAttributesAsync. Cette méthode retourne un bool, qui est vrai si les attributs ont été correctement définis.
bool success = await claimedBarcodeScanner.SetSymbologyAttributesAsync(
BarcodeSymbologies.Upca, barcodeSymbologyAttributes);
Restreindre les données d’analyse par longueur de données
Certaines symbologies sont de longueur variable telle que Code 39 ou Code 128. Les codes-barres de ces symbologies peuvent se trouver à proximité les uns des autres contenant des données différentes souvent d’une longueur spécifique. La définition de la longueur spécifique des données dont vous avez besoin peut empêcher les analyses non valides.
Avant de définir la longueur de décodage, case activée si le symbology de code-barres prend en charge plusieurs longueurs avec IsDecodeLengthSupported. Une fois que vous savez qu’il est pris en charge, vous pouvez définir le DecodeLengthKind, qui est de type BarcodeSymbologyDecodeLengthKind. Cette propriété peut avoir les valeurs suivantes :
- AnyLength : décodage des longueurs d’un nombre quelconque.
- Discret : décodage de longueurs de caractères à octet unique DecodeLength1 ou DecodeLength2.
- Plage : décodage de longueurs entre DecodeLength1 et DecodeLength2 caractères à octet unique. L’ordre de DecodeLength1 et DecodeLength2 n’a pas d’importance (peut être supérieur ou inférieur à l’autre).
Enfin, vous pouvez définir les valeurs de DecodeLength1 et DecodeLength2 pour contrôler la longueur des données dont vous avez besoin.
L’extrait de code suivant illustre la définition de la longueur du décodage :
private async Task<bool> SetDecodeLength(
ClaimedBarcodeScanner scanner,
uint symbology,
BarcodeSymbologyDecodeLengthKind kind,
uint decodeLength1,
uint decodeLength2)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsDecodeLengthSupported)
{
attributes.DecodeLengthKind = kind;
attributes.DecodeLength1 = decodeLength1;
attributes.DecodeLength2 = decodeLength2;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
Vérifier la transmission des chiffres
Un autre attribut que vous pouvez définir sur un symbology est de savoir si le chiffre case activée sera transmis à l’hôte dans le cadre des données brutes. Avant de définir ce paramètre, assurez-vous que le symbology prend en charge case activée transmission numérique avec IsCheckDigitTransmissionSupported. Définissez ensuite si case activée transmission numérique est activée avec IsCheckDigitTransmissionEnabled.
L’extrait de code suivant illustre la définition case activée transmission de chiffres :
private async Task<bool> SetCheckDigitTransmission(ClaimedBarcodeScanner scanner, uint symbology, bool isEnabled)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsCheckDigitTransmissionSupported)
{
attributes.IsCheckDigitTransmissionEnabled = isEnabled;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
Vérifier la validation des chiffres
Vous pouvez également définir si le chiffre de contrôle du code-barres sera validé. Avant de définir ce paramètre, vérifiez que le symbology prend en charge case activée validation numérique avec IsCheckDigitValidationSupported. Définissez ensuite si case activée validation numérique est activée avec IsCheckDigitValidationEnabled.
L’extrait de code suivant illustre la définition case activée validation numérique :
private async Task<bool> SetCheckDigitValidation(ClaimedBarcodeScanner scanner, uint symbology, bool isEnabled)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsCheckDigitValidationSupported)
{
attributes.IsCheckDigitValidationEnabled = isEnabled;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
Assistance et commentaires
Trouvez des réponses à vos questions
Des questions ? Demandez-nous sur notre forum Docs Q&R avec la balise UWP ou sur Stack Overflow avec la balise pointofservice.
Aidez-nous à trouver vos questions :
- Ajouter la balise pointofservice à votre question sur Stack Overflow.
- Inclure le terme « UWP » dans votre publication sur le forum Q&R