Freigeben über


Arbeiten mit Barcodescannersymbologien

In diesem Thema wird erläutert, wie Sie die Universelle Windows-Plattform (UWP)-Strichcodescanner-APIs verwenden, um Barcodesymbologien zu verarbeiten, ohne den Scanner manuell zu konfigurieren.

Eine Barcodesymbologie ist die Zuordnung von Daten zu einem bestimmten Barcodeformat. Einige gängige Symbologien sind UPC, Code 128, QR-Code usw.

Ermitteln Sie, welche Symbologien unterstützt werden

Da Ihre Anwendung möglicherweise mit verschiedenen Strichcodescanner-Modellen von mehreren Herstellern verwendet werden kann, sollten Sie den Scanner abfragen, um die Liste der von ihm unterstützten Symbologien zu ermitteln. Dies kann nützlich sein, wenn Ihre Anwendung eine bestimmte Symbologie erfordert, die möglicherweise nicht von allen Scannern unterstützt wird, oder Sie Symbologien aktivieren müssen, die entweder manuell oder programmgesteuert auf dem Scanner deaktiviert wurden.

Nachdem Sie über ein BarcodeScanner-Objekt mit BarcodeScanner.FromIdAsync verfügen, rufen Sie GetSupportedSymbologiesAsync auf, um eine Liste von Symbologien abzurufen, die vom Gerät unterstützt werden.

Im folgenden Beispiel wird eine Liste der unterstützten Symbologien des Strichcodescanners und in einem Textblock angezeigt:

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");
    }
}

Ermitteln Sie, ob eine bestimmte Symbologie unterstützt wird

Um festzustellen, ob der Scanner eine bestimmte Symbologie unterstützt, können Sie IsSymbologySupportedAsync aufrufen.

Im folgenden Beispiel wird überprüft, ob der Strichcodescanner die Code32-Symbologie unterstützt:

bool symbologySupported = await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32);

Ändern Sie, welche Symbologien erkannt werden

In einigen Fällen möchten Sie möglicherweise eine Teilmenge von Symbologien verwenden, die der Strichcodescanner unterstützt. Dies ist besonders hilfreich, um Symbologien zu blockieren, die Sie nicht in Ihrer Anwendung verwenden möchten. Um sicherzustellen, dass ein Benutzer den richtigen Barcode scannt, könnten Sie beispielsweise das Scannen auf UPC oder EAN beschränken, wenn Sie Artikel-SKUs erfassen, und das Scannen auf Code 128 beschränken, wenn Sie Seriennummern erfassen.

Sobald Sie die von Ihrem Scanner unterstützten Symbologien kennen, können Sie die Symbologien festlegen, die sie erfassen möchten. Dies kann erfolgen, nachdem Sie ein ClaimedBarcodeScanner-Objekt mithilfe von ClaimScannerAsync eingerichtet haben. Sie können SetActiveSymbologiesAsync aufrufen, um eine bestimmte Gruppe von Symbologien zu aktivieren, während diejenigen, die in Ihrer Liste fehlen, deaktiviert sind.

Im folgenden Beispiel werden die aktiven Symbologien eines beanspruchten Strichcodescanners auf Code39 und Code39Ex festgelegt:

private async void SetSymbologies(ClaimedBarcodeScanner claimedBarcodeScanner) 
{
    var symbologies = new List<uint>{ BarcodeSymbologies.Code39, BarcodeSymbologies.Code39Ex };
    await claimedBarcodeScanner.SetActiveSymbologiesAsync(symbologies);
}

Strichcode-Symbologie-Attribute

Unterschiedliche Strichcodesymbologien können unterschiedliche Attribute aufweisen, wie z.B. die Unterstützung mehrerer Decodierungslängen, die Übertragung der Prüfziffer an den Host als Teil der Rohdaten und die Überprüfung der Prüfziffer. Mit der Klasse BarcodeSymbologyAttributes können Sie diese Attribute für einen bestimmten ClaimedBarcodeScanner und eine bestimmte Strichcode-Symbologie abrufen und festlegen.

Sie können die Attribute einer bestimmten Symbologie mit GetSymbologyAttributesAsync abrufen. Der folgende Codeschnipsel ruft die Attribute der Upca-Symbologie für einen ClaimedBarcodeScanner ab.

BarcodeSymbologyAttributes barcodeSymbologyAttributes = 
    await claimedBarcodeScanner.GetSymbologyAttributesAsync(BarcodeSymbologies.Upca);

Wenn Sie mit dem Ändern der Attribute fertig und bereit sind, sie festzulegen, können Sie SetSymbologyAttributesAsync aufrufen. Diese Methode gibt einen Bool zurück, der wahr ist, wenn die Attribute erfolgreich festgelegt wurden.

bool success = await claimedBarcodeScanner.SetSymbologyAttributesAsync(
    BarcodeSymbologies.Upca, barcodeSymbologyAttributes);

Einschränken von Scandaten nach Datenlänge

Einige Symbologien haben eine variable Länge, wie z.B. Code 39 oder Code 128. Strichcodes dieser Symbologien können nahe beieinander liegen und unterschiedliche Daten enthalten, die oft eine bestimmte Länge haben. Das Festlegen der spezifischen Länge der benötigten Daten kann ungültige Scans verhindern.

Überprüfen Sie vor dem Festlegen der Decodierungslänge, ob die Strichcodesymbologie mehrere Längen mit IsDecodeLengthSupported unterstützt. Sobald Sie wissen, dass dies unterstützt wird, können Sie die DecodeLengthKind festlegen, die vom Typ BarcodeSymbologyDecodeLengthKind ist. Diese Eigenschaft kann einen der folgenden Werte haben:

  • AnyLength: Decodiert Längen einer beliebigen Zahl.
  • Diskret: Decodieren Sie Längen von DecodeLength1 oder DecodeLength2-Einzelbytezeichen.
  • Bereich: Decodieren Sie Längen zwischen DecodeLength1 und DecodeLength2-Einzelbytezeichen. Die Reihenfolge von DecodeLength1 und DecodeLength2 spielt keine Rolle (kann höher oder niedriger als die andere sein).

Zum Abschluss können Sie die Werte von DecodeLength1 und DecodeLength2 festlegen, um die Länge der benötigten Daten zu steuern.

Der folgende Codeschnipsel veranschaulicht das Festlegen der Decodierungslänge:

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;
}

Überprüfen der Ziffernübertragung

Ein weiteres Attribut, das Sie für eine Symbologie festlegen können, ist, ob die Prüfziffer als Teil der Rohdaten an den Host übertragen wird. Stellen Sie vor dem Festlegen mit IsCheckDigitTransmissionSupported sicher, dass die Symbologie die Prüfzifferübertragung unterstützt. Legen Sie dann mit IsCheckDigitTransmissionEnabled fest, ob die Prüfzifferübertragung aktiviert ist.

Der folgende Codeschnipsel veranschaulicht das Festlegen der Prüfzifferübertragung:

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;
}

Überprüfen der Ziffernüberprüfung

Sie können auch festlegen, ob die Strichcodeprüfziffer überprüft wird. Stellen Sie vor dem Festlegen mit IsCheckDigitValidationSupported sicher, dass die Symbologie die Prüfziffervalidierung unterstützt. Legen Sie dann mit IsCheckDigitValidationEnabled fest, ob die Prüfziffervalidierung aktiviert ist.

Der folgende Codeschnipsel veranschaulicht das Festlegen der Prüfziffervalidierung:

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;
}

Support und Feedback

Antworten auf Ihre Fragen

Haben Sie Fragen? Fragen Sie uns entweder in unserem Docs F&A-Forum mit dem UWP-Tag oder auf Stack Overflow mit dem Pointofservice-Tag.

Helfen Sie uns bei der Einordnung Ihrer Fragen:

  • Fügen Sie der Frage auf Stack Overflow das Pointofservice-Tag hinzu.
  • Nehmen Sie in Ihren Beitrag im F&A-Forum den Begriff „UWP“ auf.

Weitere Informationen