Freigeben über


Auflistung von Point of Service-Geräten

In diesem Thema wird gezeigt, wie Sie einen Geräte-Selektor definieren, mit dem Sie die im System verfügbaren Geräte abfragen und diesen Selektor verwenden, um Point of Service-Geräte mit einer der folgenden Methoden zu enumerieren:

Methode 1: Verwenden einer Geräteauswahl

Rufen Sie eine Geräteauswahloberfläche auf und lassen Sie den Benutzer ein angeschlossenes Gerät auswählen. Diese Methode verwaltet die Aktualisierung der Liste, wenn Geräte angeschlossen und entfernt werden, und ist einfacher und sicherer als andere Methoden.

Methode 2: Abrufen des ersten verfügbaren Geräts

Verwenden Sie GetDefaultAsync, um auf das erste verfügbare Gerät in einer bestimmten Point of Service-Geräteklasse zuzugreifen.

Methode 3: Momentaufnahme von Geräten

Erstellen Sie einen Schnappschuss von Point of Service-Geräten, die zu einem bestimmten Zeitpunkt im System vorhanden sind. Dies ist nützlich, wenn Sie eine eigene Benutzeroberfläche erstellen oder Geräte enumerieren müssen, ohne dem Benutzer eine Benutzeroberfläche anzuzeigen. FindAllAsync hält Ergebnisse zurück, bis die gesamte Enumeration abgeschlossen ist.

Methode 4: Aufzählen und Überwachen

DeviceWatcher ist ein leistungsfähigeres und flexibleres Enumerationsmodell, mit dem Sie Geräte auflisten können, die derzeit vorhanden sind, und auch Benachrichtigungen empfangen, wenn Geräte hinzugefügt oder aus dem System entfernt werden. Dies ist nützlich, wenn Sie im Hintergrund eine aktuelle Liste von Geräten für die Anzeige in Ihrer Benutzeroberfläche pflegen möchten, anstatt auf eine Momentaufnahme zu warten.

Definieren einer Geräteauswahl

Eine Geräteauswahl ermöglicht es Ihnen, die Geräte einzugrenzen, die Sie bei der Aufzählung der Geräte suchen. Auf diese Weise erhalten Sie nur relevante Ergebnisse und reduzieren die Zeit, die zur Enumeration der gewünschten Geräte benötigt wird.

Sie können die GetDeviceSelector-Methode für den Gerätetyp verwenden, nach dem Sie suchen, und die Geräteauswahl für diesen Typ abrufen. Die Verwendung von PosPrinter.GetDeviceSelector bietet Ihnen beispielsweise einen Selektor, um alle an das System angeschlossenen PosPrinter auflisten zu können, einschließlich USB-, Netzwerk- und Bluetooth POS-Druckern.

using Windows.Devices.PointOfService;

string selector = POSPrinter.GetDeviceSelector();

Die GetDeviceSelector-Methoden für die verschiedenen Gerätetypen sind:

Mit einer GetDeviceSelector-Methode, die einen PosConnectionTypes-Wert als Parameter akzeptiert, können Sie den Selektor auf lokale, Netzwerk- oder Bluetooth-angeschlossene POS-Geräte beschränken und die Zeit für den Abschluss der Abfrage verringern. Das folgende Beispiel zeigt eine Verwendung dieser Methode zum Definieren eines Selektors, der nur lokal angeschlossene POS-Drucker unterstützt.

using Windows.Devices.PointOfService;

string selector = POSPrinter.GetDeviceSelector(PosConnectionTypes.Local);

Tipp

Weitere Informationen zum Erstellen erweiterter Selektorzeichenfolgen finden Sie unter Erstellen einer Geräteauswahl.

Methode 1:Verwenden einer Geräteauswahl

Mit der DevicePicker-Klasse können Sie ein Auswahl-Flyout anzeigen, das eine Liste von Geräten enthält, aus denen der Benutzer wählen kann. Mit der Filter-Eigenschaft können Sie auswählen, welche Gerätetypen in der Auswahl angezeigt werden sollen. Diese Eigenschaft ist vom Typ DevicePickerFilter. Sie können dem Filter der SupportedDeviceClasses oder SupportedDeviceSelectors-Eigenschaft weitere Gerätetypen hinzufügen.

Wenn Sie bereit sind, die Geräteauswahl anzuzeigen, können Sie die PickSingleDeviceAsync-Methode aufrufen, die die Auswahlbenutzeroberfläche anzeigt und das ausgewählte Gerät zurückgibt. Sie müssen ein Rect angeben, das bestimmt, wo das Flyout angezeigt wird. Diese Methode gibt ein DeviceInformation-Objekt zurück. Um sie also mit den Point of Service-APIs zu verwenden, müssen Sie die FromIdAsync-Methode für die gewünschte Geräteklasse verwenden. Sie übergeben die DeviceInformation.Id-Eigenschaft als deviceId-Parameter der Methode weiter und rufen eine Instanz der Geräteklasse als Rückgabewert ab.

Der folgende Code-Schnipsel erstellt einen DevicePicker, fügt ihm einen Barcode-Scanner-Filter hinzu, lässt den Benutzer ein Gerät auswählen und erstellt dann ein BarcodeScanner-Objekt auf der Grundlage der Geräte-ID:

private async Task<BarcodeScanner> GetBarcodeScanner()
{
    DevicePicker devicePicker = new DevicePicker();
    devicePicker.Filter.SupportedDeviceSelectors.Add(BarcodeScanner.GetDeviceSelector());
    Rect rect = new Rect();
    DeviceInformation deviceInformation = await devicePicker.PickSingleDeviceAsync(rect);
    BarcodeScanner barcodeScanner = await BarcodeScanner.FromIdAsync(deviceInformation.Id);
    return barcodeScanner;
}

Methode 2:Erstes verfügbares Gerät abrufen

Die einfachste Möglichkeit zum Abrufen eines Point of Service-Geräts besteht darin, GetDefaultAsync zu verwenden, um das erste verfügbare Gerät in einer Point of Service-Geräteklasse abzurufen.

Das folgende Beispiel veranschaulicht die Verwendung von GetDefaultAsync für BarcodeScanner. Das Codierungsmuster ist für alle Point of Service-Geräteklassen ähnlich.

using Windows.Devices.PointOfService;

BarcodeScanner barcodeScanner = await BarcodeScanner.GetDefaultAsync();

Achtung

GetDefaultAsync muss mit Vorsicht verwendet werden, da es von einer Sitzung zur nächsten ein anderes Gerät zurückgeben kann. Viele Ereignisse können diese Enumeration beeinflussen, was zu einem anderen ersten verfügbaren Gerät führt, einschließlich:

  • Ändern von Kameras, die an Ihren Computer angeschlossen sind
  • Änderung von Point of Service-Geräten, die an Ihren Computer angeschlossen sind
  • Änderung der netzwerkgebundenen Point of Service-Geräte, die in Ihrem Netzwerk verfügbar sind
  • Änderung von Bluetooth Point of Service-Geräten innerhalb des Bereichs Ihres Computers
  • Änderung der die Konfiguration des Point of Service
  • Installation von Treibern oder OPOS-Dienstobjekten
  • Installation von Point of Service-Erweiterungen
  • Aktualisierung auf Windows-Betriebssystem

Methode 3: Momentaufnahme von Geräten

In manchen Szenarien möchten Sie vielleicht Ihre eigene Benutzeroberfläche erstellen oder Sie müssen Geräte enumerieren, ohne dem Benutzer eine Benutzeroberfläche zu zeigen. In diesen Situationen können Sie mit DeviceInformation.FindAllAsync eine Momentaufnahme der Geräte erstellen, die derzeit mit dem System verbunden oder gekoppelt sind. Diese Methode hält alle Ergebnisse zurück, bis die gesamte Enumeration abgeschlossen ist.

Tipp

Es wird empfohlen, die GetDeviceSelector-Methode mit dem PosConnectionTypes-Parameter zu verwenden, wenn Sie FindAllAsync verwenden, um die Abfrage auf den gewünschten Verbindungstyp zu beschränken. Netzwerk- und Bluetooth-Verbindungen können die Ergebnisse verzögern, da ihre Enumerationen abgeschlossen sein müssen, bevor FindAllAsync-Ergebnisse zurückgegeben werden.

Achtung

FindAllAsync gibt ein Array von Geräten zurück. Die Reihenfolge dieses Arrays kann sich von Sitzung zu Sitzung ändern. Daher ist es nicht empfehlenswert, sich auf eine bestimmte Reihenfolge zu verlassen, wenn Sie einen fest kodierten Index im Array verwenden. Verwenden Sie DeviceInformation-Eigenschaften, um Ihre Ergebnisse zu filtern oder eine Benutzeroberfläche bereitzustellen, aus der der Benutzer auswählen kann.

Dieses Beispiel verwendet den oben definierten Selektor, um mit FindAllAsync eine Momentaufnahme der Geräte zu erstellen. Anschließend werden die einzelnen von der Auflistung ermittelten Elemente aufgezählt und der Gerätename und die ID in die Debug-Ausgabe geschrieben.

using Windows.Devices.Enumeration;

DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);

foreach (DeviceInformation devInfo in deviceCollection)
{
    Debug.WriteLine("{0} {1}", devInfo.Name, devInfo.Id);
}

Tipp

Beim Arbeiten mit den Windows.Devices.Enumeration-APIs müssen Sie häufig DeviceInformation-Objekte verwenden, um Informationen zu einem bestimmten Gerät abzurufen. Beispielsweise kann die Eigenschaft DeviceInformation.ID verwendet werden, um dasselbe Gerät wiederherzustellen und wiederzuverwenden, wenn es in einer zukünftigen Sitzung verfügbar ist, und die DeviceInformation.Name-Eigenschaft kann für Anzeigezwecke in Ihrer App verwendet werden. Weitere Informationen zu verfügbaren Eigenschaften finden Sie auf der DeviceInformation-Referenzseite.

Methode 4: Enumeration und Überwachen

Eine leistungsfähigere und flexiblere Methode für die Enumeration von Geräten ist die Erstellung eines DeviceWatcher. Ein Geräteüberwachungsgerät listet Geräte dynamisch auf, sodass die Anwendung Benachrichtigungen empfängt, wenn Geräte nach Abschluss der ersten Enumeration hinzugefügt, entfernt oder geändert werden. Ein DeviceWatcher ermöglicht es Ihnen, zu erkennen, wann ein mit dem Netzwerk verbundenes Gerät online ist, ein Bluetooth-Gerät in Reichweite ist und ob ein lokal verbundenes Gerät nicht angeschlossen ist, sodass Sie die entsprechende Aktion innerhalb Ihrer Anwendung ausführen können.

Dieses Beispiel verwendet den oben definierten Selektor, um einen DeviceWatcher zu erstellen, und definiert Ereignishandler für die Benachrichtigungen Hinzugefügt, Entfernt und Aktualisiert. Sie müssen die Details der Aktionen eingeben, die Sie bei jeder Benachrichtigung ausführen möchten.

using Windows.Devices.Enumeration;

DeviceWatcher deviceWatcher = DeviceInformation.CreateWatcher(selector);
deviceWatcher.Added += DeviceWatcher_Added;
deviceWatcher.Removed += DeviceWatcher_Removed;
deviceWatcher.Updated += DeviceWatcher_Updated;

void DeviceWatcher_Added(DeviceWatcher sender, DeviceInformation args)
{
    // TODO: Add the DeviceInformation object to your collection
}

void DeviceWatcher_Removed(DeviceWatcher sender, DeviceInformationUpdate args)
{
    // TODO: Remove the item in your collection associated with DeviceInformationUpdate
}

void DeviceWatcher_Updated(DeviceWatcher sender, DeviceInformationUpdate args)
{
    // TODO: Update your collection with information from DeviceInformationUpdate
}

Tipp

Weitere Informationen zur Verwendung eines DeviceWatcher finden Sie unter Enumeration und Überwachen von Geräten.

Siehe auch

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 den Begriff „UWP“ in Ihren Beitrag im F&A-Forum auf