Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Windows.Devices.Enumeration-APIs ermöglichen es Ihnen, Geräte zu finden, die intern mit dem System oder extern verbunden sind oder über Drahtlos- oder Netzwerkprotokolle erkannt werden können.
Samples
Die einfachste Möglichkeit zum Aufzählen aller verfügbaren Geräte besteht darin, eine Momentaufnahme mit dem Befehl "FindAllAsync " zu erstellen (weiter unten in einem Abschnitt erläutert).
async void enumerateSnapshot(){
DeviceInformationCollection collection = await DeviceInformation.FindAllAsync();
}
Ein weiterführendes Beispiel für die Windows.Devices.Enumeration-APIs finden Sie unter Beispiel zur Geräteenumeration und -kopplung.
Aufzählungs-APIs
Der Namespace Windows.Devices.Enumeration ermöglicht es Ihnen, Geräte zu finden, die intern mit dem System verbunden, extern verbunden oder über Drahtlos- oder Netzwerkprotokolle erkennbar sind. Zu den features, die von diesen APIs unterstützt werden, gehören:
- Suchen eines Geräts, mit dem eine Verbindung mit Ihrer Anwendung hergestellt werden soll.
- Abrufen von Informationen zu Geräten, die mit dem System verbunden oder auffindbar sind.
- Lassen Sie eine App Benachrichtigungen erhalten, wenn Geräte hinzugefügt werden, eine Verbindung herstellen, die Verbindung trennen, sich ihr Onlinestatus ändert oder sich andere Eigenschaften ändern.
- Lassen Sie eine App Trigger im Hintergrund empfangen, wenn Geräte eine Verbindung herstellen, die Verbindung trennen, ihren Onlinestatus ändern oder andere Eigenschaften ändern.
Diese APIs können Geräte über eines der folgenden Protokolle und Busse auflisten, sofern das einzelne Gerät und das System, auf dem die App ausgeführt wird, diese Technologie unterstützen. Dies ist keine vollständige Liste, und andere Protokolle können von einem bestimmten Gerät unterstützt werden.
- Physisch verbundene Busse. Dazu gehören PCI und USB. Zum Beispiel alles, was Sie im Geräte-Manager sehen können.
- Upnp
- Digital Living Network Alliance (DLNA)
- Entdeckung und Start (DIAL)
- DNS Service Discovery (DNS-SD)
- Webdienste auf Geräten (WSD)
- Bluetooth
- Wi-Fi Direct
- WiGig
- Point of Service
In vielen Fällen müssen Sie sich keine Gedanken über die Verwendung der Enumerations-APIs machen. Dies liegt daran, dass viele APIs, die Geräte verwenden, automatisch das entsprechende Standardgerät auswählen oder eine optimierte Enumerations-API bereitstellen. Beispielsweise verwendet MediaElement automatisch das Standardmäßige Audiorenderergerät. Solange Ihre App das Standardgerät verwenden kann, ist es nicht erforderlich, die Enumerations-APIs in Ihrer Anwendung zu verwenden. Die Enumerations-APIs bieten eine allgemeine und flexible Möglichkeit, um verfügbare Geräte zu ermitteln und zu verbinden. Dieses Thema enthält Informationen zum Aufzählen von Geräten und beschreibt die vier gängigen Methoden zum Aufzählen von Geräten.
- Verwenden der Benutzeroberfläche DevicePicker
- Aufzählen einer Momentaufnahme von Geräten, die derzeit vom System erkannt werden können
- Aufzählen von Geräten, die zurzeit auffindbar sind und auf Änderungen achten
- Aufzählen von geräten, die zurzeit auffindbar sind und auf Änderungen in einer Hintergrundaufgabe achten
DeviceInformation-Objekte
Wenn Sie mit den Enumerations-APIs arbeiten, müssen Sie häufig DeviceInformation-Objekte verwenden. Diese Objekte enthalten die meisten verfügbaren Informationen zum Gerät. In der folgenden Tabelle werden einige der DeviceInformation-Eigenschaften erläutert, die Sie interessieren werden. Eine vollständige Liste finden Sie auf der Referenzseite für DeviceInformation.
| Property | Kommentare |
|---|---|
| DeviceInformation.Id | Dies ist der eindeutige Bezeichner des Geräts und wird als Zeichenfolgenvariable bereitgestellt. In den meisten Fällen ist dies ein undurchsichtiger Wert, den Sie einfach von einer Methode an eine andere übergeben, um das spezifische Gerät anzugeben, an dem Sie interessiert sind. Sie können diese Eigenschaft und die DeviceInformation.Kind-Eigenschaft auch verwenden, nachdem Sie die App geschlossen und erneut geöffnet haben. Dadurch wird sichergestellt, dass Sie dasselbe DeviceInformationobjekt wiederherstellen und wiederverwenden können. |
| DeviceInformation.Kind | Dies gibt die Art des Geräteobjekts an, das durch das DeviceInformation-Objekt dargestellt wird. Dies ist nicht die Gerätekategorie oder gerätetyp. Ein einzelnes Gerät kann durch verschiedene DeviceInformation-Objekte unterschiedlicher Art dargestellt werden. Die möglichen Werte für diese Eigenschaft werden sowohl in DeviceInformationKind als auch in der Beziehung zueinander aufgeführt. |
| DeviceInformation.Properties | Dieser Eigenschaftenbehälter enthält Informationen, die für das objekt DeviceInformation angefordert werden. Auf die am häufigsten verwendeten Eigenschaften wird einfach als Eigenschaften des DeviceInformation-Objekts verwiesen, z. B. mit DeviceInformation.Name. Weitere Informationen finden Sie unter Geräteinformationseigenschaften. |
DevicePicker-Benutzeroberfläche
Der DevicePicker ist ein von Windows bereitgestelltes Steuerelement, das eine kleine Benutzeroberfläche erstellt, über die der Benutzer ein Gerät aus einer Liste auswählen kann. Sie kann auf verschiedene Arten angepasst werden, z. B.:
- Steuern Sie Geräte, die auf der Benutzeroberfläche angezeigt werden, indem Sie eine SupportedDeviceSelectors, eine SupportedDeviceClasses oder beides zum DevicePicker.Filter hinzufügen. In den meisten Fällen müssen Sie nur einen Selektor oder eine Klasse hinzufügen, aber wenn Sie mehrere benötigen, können Sie mehrere hinzufügen. Wenn Sie jedoch mehrere Selektoren oder Klassen hinzufügen, werden sie durch eine ODER-Logik miteinander verknüpft.
- Geben Sie die Eigenschaften an, die Sie für die Geräte abrufen möchten. Dazu können Sie Eigenschaften zu DevicePicker.RequestedProperties hinzufügen.
- Ändern Sie die Darstellung des DevicePicker mithilfe von Appearance.
- Geben Sie die Größe und Position des DevicePicker an, wenn sie angezeigt wird.
Während die DevicePicker angezeigt wird, wird der Inhalt der Benutzeroberfläche automatisch aktualisiert, wenn Geräte hinzugefügt, entfernt oder aktualisiert werden.
Note
Sie können DeviceInformationKind nicht mit dem DevicePicker festlegen. Wenn Sie Geräte eines bestimmten DeviceInformationKind haben möchten, müssen Sie eine DeviceWatcher erstellen und eine eigene Benutzeroberfläche bereitstellen.
Das Streamen von Medieninhalten und DIAL verfügen jeweils auch über eigene Auswahldialoge, wenn Sie diese verwenden möchten. Sie sind CastingDevicePicker und DialDevicePicker.
Auflisten einer Bestandsaufnahme der Geräte
In einigen Szenarien ist die DevicePicker nicht für Ihre Bedürfnisse geeignet, und Sie benötigen etwas flexibler. Vielleicht möchten Sie eine eigene Benutzeroberfläche erstellen oder Geräte auflisten, ohne dem Benutzer eine Benutzeroberfläche anzuzeigen. In diesen Situationen können Sie eine Liste der Geräte erstellen. Dies umfasst das Durchsuchen der Geräte, die derzeit mit dem System verbunden oder gekoppelt sind. Sie müssen jedoch beachten, dass diese Methode nur eine Momentaufnahme der verfügbaren Geräte betrachtet, sodass Sie nach der Aufzählung der Liste keine Geräte finden können, die eine Verbindung herstellen. Sie werden auch nicht benachrichtigt, wenn ein Gerät aktualisiert oder entfernt wird. Ein weiterer potenzieller Nachteil ist, dass diese Methode alle Ergebnisse zurückhält, bis die gesamte Enumeration abgeschlossen ist. Aus diesem Grund sollten Sie diese Methode nicht verwenden, wenn Sie an AssociationEndpoint-, AssociationEndpointContainer- oder AssociationEndpointService-Objekten interessiert sind, da sie über ein Netzwerk- oder Drahtlosprotokoll gefunden werden. Dies kann bis zu 30 Sekunden dauern. In diesem Szenario sollten Sie ein DeviceWatcher-Objekt verwenden, um die möglichen Geräte auflisten zu können.
Verwenden Sie die Methode FindAllAsync, um eine Momentaufnahme der Geräte zu durchlaufen. Diese Methode wartet, bis der gesamte Enumerationsprozess abgeschlossen ist, und gibt alle Ergebnisse als ein DeviceInformationCollection - Objekt zurück. Diese Methode ist ebenfalls überladen und bietet Ihnen mehrere Optionen zum Filtern Ihrer Ergebnisse und zum Einschränken auf die Geräte, die Sie interessieren. Dazu können Sie eine DeviceClass bereitstellen oder eine Geräteauswahl übergeben. Die Geräteauswahl ist eine AQS-Zeichenfolge (Advanced Query Syntax), die die Geräte angibt, die Sie aufzählen möchten. Weitere Informationen finden Sie unter Erstellen einer Geräteauswahl.
Zusätzlich zum Einschränken der Ergebnisse können Sie auch die Eigenschaften angeben, die Sie für die Geräte abrufen möchten. Wenn Sie dies tun, stehen die angegebenen Eigenschaften im Eigenschaftenbehälter für jedes der in der Auflistung zurückgegebenen objekte DeviceInformation zur Verfügung. Es ist wichtig zu beachten, dass nicht alle Eigenschaften für alle Gerätetypen verfügbar sind. Informationen dazu, welche Eigenschaften für welche Gerätetypen verfügbar sind, finden Sie unter Geräteinformationseigenschaften.
Aufzählen und Überwachen von Geräten
Eine leistungsfähigere und flexiblere Methode zum Aufzählen von Geräten ist die Erstellung eines DeviceWatcher. Diese Option bietet die größte Flexibilität beim Aufzählen von Geräten. Sie können Geräte aufzählen, die derzeit vorhanden sind, und auch Benachrichtigungen empfangen, wenn Geräte, die Ihrer Geräteauswahl entsprechen, hinzugefügt, entfernt oder Eigenschaften geändert werden. Wenn Sie ein DeviceWatcher-Objekt erstellen, stellen Sie eine Geräteauswahl bereit. Weitere Informationen zu Geräteauswahlen finden Sie unter Erstellen einer Geräteauswahl. Nach dem Erstellen des Watchers erhalten Sie die folgenden Benachrichtigungen für jedes Gerät, das Ihren angegebenen Kriterien entspricht.
- Benachrichtigung hinzufügen, wenn ein neues Gerät hinzugefügt wird.
- Aktualisieren Sie die Benachrichtigung, wenn eine eigenschaft, an der Sie interessiert sind, geändert wird.
- Entfernen Sie die Benachrichtigung, wenn ein Gerät nicht mehr verfügbar ist oder nicht mehr mit Ihrem Filter übereinstimmt.
In den meisten Fällen, in denen Sie eine DeviceWatcher verwenden, verwalten Sie eine Liste von Geräten und fügen sie hinzu, Entfernen von Elementen daraus oder Aktualisieren von Elementen, wenn Ihr Watcher Updates von den Geräten empfängt, die Sie beobachten. Wenn Sie eine Aktualisierungsbenachrichtigung erhalten, stehen die aktualisierten Informationen als DeviceInformationUpdate-Objekt zur Verfügung. Um Ihre Geräteliste zu aktualisieren, suchen Sie zuerst die entsprechende DeviceInformation die geändert wurde. Rufen Sie dann die Update-Methode für dieses Objekt auf, und stellen Sie das DeviceInformationUpdate-Objekt bereit. Dies ist eine Komfortfunktion, die Ihr DeviceInformation-Objekt automatisch aktualisiert.
Da ein DeviceWatcher Benachrichtigungen sendet, sobald Geräte eingehen und sich ändern, sollten Sie diese Methode zum Aufzählen von Geräten verwenden, wenn Sie an AssociationEndpoint interessiert sind, AssociationEndpointContainer oder AssociationEndpointService Objekte, da sie über Netzwerk- oder Drahtlosprotokolle aufgezählt werden.
Verwenden Sie zum Erstellen eines DeviceWatcher eine der methoden CreateWatcher. Diese Methoden sind überladen, damit Sie die geräte angeben können, an denen Sie interessiert sind. Dazu können Sie eine DeviceClass bereitstellen oder eine Geräteauswahl übergeben. Die Geräteauswahl ist eine AQS-Zeichenfolge, die die Geräte angibt, die Sie auflisten möchten. Weitere Informationen finden Sie unter Erstellen einer Geräteauswahl. Sie können auch die Eigenschaften angeben, die Sie für die Geräte abrufen möchten und an denen Sie interessiert sind. Wenn Sie dies tun, stehen die angegebenen Eigenschaften im Eigenschaftenbehälter für jedes der in der Auflistung zurückgegebenen objekte DeviceInformation zur Verfügung. Es ist wichtig zu beachten, dass nicht alle Eigenschaften für alle Gerätetypen verfügbar sind. Informationen dazu, welche Eigenschaften für welche Gerätetypen verfügbar sind, finden Sie unter Geräteinformationseigenschaften
Geräte als Hintergrundaufgabe ansehen
Das Überwachen von Geräten als Hintergrundaufgabe ähnelt dem Erstellen einer DeviceWatcher wie oben beschrieben. Tatsächlich müssen Sie weiterhin ein normales DeviceWatcher-Objekt erstellen, wie im vorherigen Abschnitt beschrieben. Nachdem Sie es erstellt haben, rufen Sie GetBackgroundTrigger anstelle von DeviceWatcher.Start auf. Wenn Sie GetBackgroundTrigger aufrufen, müssen Sie angeben, an welchen der Benachrichtigungen Sie interessiert sind: Hinzufügen, Entfernen oder Aktualisieren. Sie können keine Aktualisierung oder Entfernung anfordern, ohne auch Hinzufügen anzufordern. Nachdem Sie den Trigger registriert haben, wird der DeviceWatcher sofort im Hintergrund ausgeführt. Ab diesem Zeitpunkt wird die Hintergrundaufgabe ausgelöst, sobald sie eine neue Benachrichtigung für Ihre Anwendung empfängt, die Ihren Kriterien entspricht, und sie stellt die neuesten Änderungen bereit, seit sie ihre Anwendung zuletzt ausgelöst hat.
Important
Das erste Mal, dass ein DeviceWatcherTrigger Ihre Anwendung auslöst, ist, wenn der Watcher den Zustand EnumerationCompleted erreicht. Dies bedeutet, dass sie alle anfänglichen Ergebnisse enthält. Jedes mal, wenn sie Ihre Anwendung auslöst, enthält sie nur die Benachrichtigungen zum Hinzufügen, Aktualisieren und Entfernen, die seit dem letzten Auslöser aufgetreten sind. Dies unterscheidet sich geringfügig von einem DeviceWatcher-Objekt im Vordergrund, da die anfänglichen Ergebnisse nicht einzeln eintreffen, sondern erst nach Erreichen von EnumerationCompleted gebündelt übermittelt werden.
Einige drahtlose Protokolle verhalten sich unterschiedlich, je nachdem, ob sie im Hintergrund oder im Vordergrund nach Geräten suchen, oder sie unterstützen die Suche im Hintergrund überhaupt nicht. Es gibt drei Möglichkeiten im Zusammenhang mit dem Scannen im Hintergrund. In der folgenden Tabelle sind die Möglichkeiten und auswirkungen aufgeführt, die sich auf Ihre Anwendung auswirken können. Bluetooth und Wi-Fi Direct unterstützen z. B. keine Hintergrundscans, sodass sie durch Erweiterung keine DeviceWatcherTrigger unterstützen.
| Behavior | Auswirkungen |
|---|---|
| Gleiches Verhalten im Hintergrund | Nichts |
| Nur passive Scans im Hintergrund möglich | Es kann länger dauern, bis das Gerät erkannt wird, während auf einen passiven Scan gewartet wird. |
| Hintergrundscans werden nicht unterstützt | Vom DeviceWatcherTrigger werden keine Geräte erkannt, und es werden keine Updates gemeldet. |
Wenn Ihr DeviceWatcherTrigger ein Protokoll enthält, das das Scannen nicht als Hintergrundaufgabe unterstützt, funktioniert der Trigger weiterhin. Sie können jedoch keine Updates oder Ergebnisse über dieses Protokoll abrufen. Die Updates für andere Protokolle oder Geräte werden weiterhin normal erkannt.
Verwenden von DeviceInformationKind
In den meisten Szenarien müssen Sie sich keine Gedanken über das DeviceInformationKind eines objekts DeviceInformation machen. Dies liegt daran, dass der von Ihnen verwendete, von der Geräte-API zurückgegebene Geräteselektor häufig gewährleistet, dass Sie die richtigen Arten von Geräteobjekten zur Verwendung mit dieser API erhalten. In einigen Szenarien möchten Sie jedoch deviceInformation für Geräte abrufen, es gibt jedoch keine entsprechende Geräte-API, um eine Geräteauswahl bereitzustellen. In diesen Fällen müssen Sie einen eigenen Selektor erstellen. Webdienste auf Geräten verfügen z. B. nicht über eine dedizierte API, Sie können diese Geräte jedoch ermitteln und Informationen über sie mithilfe der Windows abrufen. Devices.Enumeration-APIs und verwenden sie dann mithilfe der Socket-APIs.
Wenn Sie eine eigene Geräteauswahl zum Aufzählen von Geräteobjekten erstellen, ist DeviceInformationKind wichtig für Sie zu verstehen. Alle möglichen Arten sowie ihre Beziehung zueinander werden auf der Referenzseite für DeviceInformationKind beschrieben. Eine der häufigsten Verwendungsmöglichkeiten von DeviceInformationKind besteht darin, anzugeben, nach welcher Art von Geräten Sie suchen, wenn Sie eine Abfrage in Verbindung mit einer Geräteauswahl senden. Dadurch wird sichergestellt, dass Sie nur Geräte aufzählen, die mit dem bereitgestellten DeviceInformationKind übereinstimmen. Beispielsweise könnten Sie ein DeviceInterface-Objekt finden und dann eine Abfrage ausführen, um die Informationen für das übergeordnete Device-Objekt abzurufen. Dieses übergeordnete Objekt kann zusätzliche Informationen enthalten.
Es ist wichtig zu beachten, dass die eigenschaften, die im Eigenschaftenbehälter für ein DeviceInformationobjekt verfügbar sind, je nach DeviceInformationKind des Geräts variieren. Bestimmte Eigenschaften sind nur für bestimmte Arten verfügbar. Weitere Informationen dazu, welche Eigenschaften für welche Arten verfügbar sind, finden Sie unter Geräteinformationseigenschaften. Daher erhalten Sie im obigen Beispiel durch die Suche nach dem übergeordneten Gerät Zugriff auf weitere Informationen, die nicht über das DeviceInterface-Geräteobjekt verfügbar waren. Aus diesem Grund ist es wichtig, beim Erstellen der AQS-Filterzeichenfolgen sicherzustellen, dass die angeforderten Eigenschaften für die DeviceInformationKind-Objekte verfügbar sind, die Sie aufzählen. Weitere Informationen zum Erstellen eines Filters finden Sie unter Erstellen einer Geräteauswahl.
Beim Aufzählen von AssociationEndpoint-, AssociationEndpointContainer- oder AssociationEndpointService-Objekten werden Sie über ein Drahtlos- oder Netzwerkprotokoll aufgezählt. In diesen Situationen wird empfohlen, findAllAsync nicht zu verwenden und stattdessen CreateWatcher zu verwenden. Dies liegt daran, dass die Suche über ein Netzwerk häufig zu Suchvorgängen führt, die vor dem Generieren von EnumerationCompleted kein Timeout für 10 oder mehr Sekunden haben. FindAllAsync schließt den Vorgang erst ab, wenn EnumerationCompleted ausgelöst wird. Wenn Sie eine DeviceWatcher verwenden, erhalten Sie ergebnisse näher an Echtzeit, unabhängig davon, wann EnumerationCompleted aufgerufen wird.
Speichern eines Geräts zur späteren Verwendung
Jedes DeviceInformationObjekt wird durch eine Kombination aus zwei Informationsabschnitten eindeutig identifiziert: DeviceInformation.Id und DeviceInformation.Kind. Wenn Sie diese beiden Informationen beibehalten, können Sie ein DeviceInformation-Objekt neu erstellen, nachdem es verloren gegangen ist, indem Sie diese Informationen an CreateFromIdAsync bereitstellen. Wenn Sie dies tun, können Sie Benutzereinstellungen für ein Gerät speichern, das in Ihre App integriert ist.
Windows developer