Freigeben über


Erste Schritte mit einem Kamera-Barcodescanner

Dieses Thema beschreibt, wie Sie einen einfachen Kamera-Barcodescanner in einer UWP-Anwendung einrichten.

Hinweis

Der in Windows 10/11 integrierte Software-Decoder wird von der Digimarc Corporation bereitgestellt.

Die folgenden Codeausschnitte dienen nur zu Demonstrationszwecken. Ein vollständiges, funktionierendes Beispiel finden Sie im Beispiel „Barcodescanner“.

Schritt 1: Hinzufügen von Funktionsdeklarationen zu Ihrem App-Manifest

  1. Öffnen Sie in Microsoft Visual Studio im Projektmappen-Explorer, den Designer für das Anwendungsmanifest, indem Sie auf das Element package.appxmanifest doppelklicken.
  2. Wählen Sie die Registerkarte Funktionen aus.
  3. Aktivieren Sie die Kontrollkästchen für Webcam und PointOfService.

Hinweis

Die Webcam-Funktion ist erforderlich, damit der Softwaredecoder Frames von der Kamera empfängt, um sowohl den Barcode zu decodieren als auch eine Vorschau in Ihrer Anwendung bereitzustellen.

Schritt 2: Hinzufügen von using-Direktiven

using Windows.Devices.Enumeration;
using Windows.Devices.PointOfService;

Schritt 3: Definieren Ihrer Geräteauswahl

Verwenden Sie eine der BarcodeScanner.GetDeviceSelector-Methoden, um ein BarcodeScanner-Objekt für jeden verbundenen Barcodescanner abzurufen.

Option A: Suchen aller Barcodescanner

string selector = BarcodeScanner.GetDeviceSelector();

Option B: Suchen aller Barcodescanner basierend auf dem Bereich (in diesem Beispiel wird nach dem Verbindungstyplokal gefiltert)

string selector = BarcodeScanner.GetDeviceSelector(PosConnectionTypes.Local);
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Schritt 4: Auflisten von Barcodescannern

Wenn Sie nicht erwarten, dass sich die Liste der Geräte während der Lebensdauer Ihrer Anwendung ändert, verwenden Sie DeviceInformation.FindAllAsync, um eine einmalige Momentaufnahme zu erhalten. Wenn sich die Liste der Barcodescanner jedoch während der Lebensdauer Ihrer Anwendung ändern könnte, verwenden Sie stattdessen einen DeviceWatcher.

Wichtig

Die Verwendung von GetDefaultAsync zum Aufzählen von PointOfService-Geräten kann zu inkonsistentem Verhalten führen, da nur das erste Gerät zurückgegeben wird, das in der Klasse gefunden wurde (das von Sitzung zu Sitzung wechseln kann).

Option A: Auflisten einer Momentaufnahme aller angeschlossenen Barcodescanner basierend auf dem in Schritt 3 erstellten Selektor

In diesem Codeausschnitt erstellen wir ein DeviceInformationCollection-Objekt und verwenden ****DeviceInformation.FindAllAsync, um es aufzufüllen.

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

Tipp

Unter Auflisten einer Momentaufnahme von Geräten finden Sie weitere Informationen zur Verwendung von DeviceInformation.FindAllAsync.

Option B: Auflisten verfügbarer Barcodescanner basierend auf dem in Schritt 3 erstellten Selektor und Überwachen der Änderungen an dieser Sammlung

In diesem Codeausschnitt erstellen wir eine DeviceWatcher-Instanz mit DeviceInformation.CreateWatcher.

DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
watcher.Added += Watcher_Added;
watcher.Removed += Watcher_Removed;
watcher.Updated += Watcher_Updated;
watcher.Start();

Tipp

Weitere Informationen finden Sie unter Auflisten und Überwachen von Geräten und DeviceWatcher.

Schritt 5: Identifizieren von Kamera-Barcodescannern

Ein Kamera-Barcodescanner besteht aus einer Kamera (an einen Computer angeschlossen) in Kombination mit einem Softwaredecoder, der von Windows dynamisch gekoppelt wird, um einen voll funktionsfähigen Barcodescanner für Universelle Windows-Plattform -Apps (UWP) zu erstellen.

Die BarcodeScanner.VideoDeviceID kann verwendet werden, um zwischen Kamera-Barcodescannern und physischen Barcodescannern zu unterscheiden. Eine VideoDeviceID, die nicht NULL ist, gibt an, dass das Barcodescannerobjekt aus Ihrer Gerätesammlung ein Kamera-Barcodescanner ist. Wenn Sie über mehr als einen Kamera-Barcodescanner verfügen, sollten Sie eine separate Sammlung ohne physische Barcodescanner erstellen.

Kamera-Barcodescanner mit dem Decoder, der im Lieferumfang von Windows enthalten ist, werden wie folgt identifiziert:

Microsoft BarcodeScanner (Name Ihrer Kamera hier)

Wenn mehr als eine Kamera vorhanden ist und diese in das Gehäuse des Computers integriert sind, kann der Name zwischen Vorder- und Rückkameras unterscheiden.

Wenn DeviceWatcher gestartet wird (siehe Schritt 4: Auflisten von Barcodescannern), wird jedes verbundene Gerät durchgezählt. Im folgenden Codeausschnitt fügen wir jeden verfügbaren Scanner einer BarcodeScanner-Sammlung hinzu und binden die Sammlung an ein ListBox-Objekt.

ObservableCollection<BarcodeScanner> barcodeScanners = 
  new ObservableCollection<BarcodeScanner>();

private async void Watcher_Added(DeviceWatcher sender, DeviceInformation args)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        barcodeScanners.Add(new BarcodeScanner(args.Name, args.Id));

        // Select the first scanner by default.
        if (barcodeScanners.Count == 1)
        {
            ScannerListBox.SelectedIndex = 0;
        }
    });
}

Wenn sich der SelectedIndex des ListBox-Objekts ändert (das erste Element ist standardmäßig im vorherigen Codeausschnitt ausgewählt), fragen wir die Geräteinformationen ab (Aufgabe SelectScannerAsync ist in Schritt 6: Anfordern des Kamera-Barcodescanners implementiert).

private async void ScannerSelection_Changed(object sender, SelectionChangedEventArgs args)
{
    var selectedScannerInfo = (BarcodeScanner)args.AddedItems[0];
    var deviceId = selectedScannerInfo.DeviceId;

    await SelectScannerAsync(deviceId);
}

Schritt 6: Anfordern des Kamera-Barcodescanners

Rufen Sie BarcodeScanner.ClaimScannerAsync auf, um die exklusive Verwendung des Kamera-Barcodescanners zu erhalten.

private async Task SelectScannerAsync(string scannerDeviceId)
{
    selectedScanner = await BarcodeScanner.FromIdAsync(scannerDeviceId);

    if (selectedScanner != null)
    {
        claimedScanner = await selectedScanner.ClaimScannerAsync();
        if (claimedScanner != null)
        {
            await claimedScanner.EnableAsync();
        }
        else
        {
            rootPage.NotifyUser("Failed to claim the selected barcode scanner", NotifyType.ErrorMessage);
        }
    }
    else
    {
        rootPage.NotifyUser("Failed to create a barcode scanner object", NotifyType.ErrorMessage);
    }
}

Schritt 7: Vom System bereitgestellte Vorschau

Eine Kameravorschau ist erforderlich, um dem Benutzer zu helfen, die Kamera auf einen Barcode auszurichten. Windows bietet eine einfache Kameravorschau, die ein Dialogfeld zur Steuerung des Kamera-Barcodescanners startet.

Rufen Sie ClaimedBarcodeScanner.ShowVideoPreview auf, um das Dialogfeld zu öffnen, und rufen Sie ClaimedBarcodeScanner.HideVideoPreview auf, um es zu schließen.

Tipp

Weitere Informationen zum Hosten der Vorschau für den Kamera-Barcodescanner in Ihrer Anwendung finden Sie unter Hosten der Vorschau.

Schritt 8: Scan initiieren

Sie können den Scanprozess initiieren, indem Sie StartSoftwareTriggerAsync aufrufen.

Abhängig vom Wert von IsDisabledOnDataReceived scannt der Scanner möglicherweise nur einen Barcode und beendet sich dann oder scannt kontinuierlich, bis Sie StopSoftwareTriggerAsync aufrufen.

Legen Sie den gewünschten Wert von IsDisabledOnDataReceived fest, um das Scannerverhalten zu steuern, wenn ein Barcode decodiert wird.

Wert Beschreibung
True Nur einen Barcode scannen und dann beenden
False Fortlaufendes Scannen von Barcodes ohne Unterbrechung

Siehe auch