Apparaten enumereren

De Windows. Devices.Enumeration API's kunt u apparaten vinden die intern zijn verbonden met het systeem, extern verbonden of detecteerbaar via draadloze of netwerkprotocollen.

Voorbeelden

De eenvoudigste manier om alle beschikbare apparaten te inventariseren, is door een momentopname te maken met de opdracht FindAllAsync (verder uitgelegd in een sectie hieronder).

async void enumerateSnapshot(){
  DeviceInformationCollection collection = await DeviceInformation.FindAllAsync();
}

Zie het voorbeeld voor apparaatinventarisatie en koppelen voor een geavanceerder voorbeeld van de Windows.Devices.Enumeration-API’s.

Enumeratie-API's

De naamruimte Windows.Devices.Enumeration stelt u in staat apparaten te vinden die intern met het systeem zijn verbonden, extern zijn verbonden of via draadloze protocollen of netwerkprotocollen kunnen worden gedetecteerd. Enkele van de functies die door deze API's worden ondersteund, zijn:

  • Een apparaat zoeken om verbinding mee te maken met uw toepassing.
  • Informatie ophalen over apparaten die zijn verbonden met of detecteerbaar zijn door het systeem.
  • Laat een app meldingen ontvangen wanneer apparaten worden toegevoegd, verbinding maken, de verbinding verbreken, de onlinestatus wijzigen of andere eigenschappen wijzigen.
  • Laat een app achtergrondtriggers ontvangen wanneer apparaten verbinding maken, de verbinding verbreken, de onlinestatus wijzigen of andere eigenschappen wijzigen.

Deze API's kunnen apparaten opsommen via een van de volgende protocollen en bussen, mits het afzonderlijke apparaat en het systeem waarop de app wordt uitgevoerd, die technologie ondersteunen. Dit is geen volledige lijst en andere protocollen worden mogelijk ondersteund door een specifiek apparaat.

In veel gevallen hoeft u zich geen zorgen te maken over het gebruik van de opsommings-API's. Dit komt doordat veel API's die gebruikmaken van apparaten automatisch het juiste standaardapparaat selecteren of een meer gestroomlijnde opsommings-API bieden. MediaPlayerElement gebruikt bijvoorbeeld automatisch het standaardapparaat voor audio-renderer. Zolang uw app het standaardapparaat kan gebruiken, hoeft u de opsommings-API's niet in uw toepassing te gebruiken. De opsommings-API's bieden een algemene en flexibele manier om beschikbare apparaten te detecteren en er verbinding mee te maken. Dit onderwerp bevat informatie over het inventariseren van apparaten en beschrijft de vier algemene manieren om apparaten op te sommen.

  • De gebruikersinterface van DevicePicker
  • Een momentopname inventariseren van apparaten die momenteel door het systeem worden gedetecteerd
  • Apparaten inventariseren die momenteel detecteerbaar zijn en controleren op wijzigingen
  • Apparaten inventariseren die momenteel detecteerbaar zijn en controleren op wijzigingen in een achtergrondtaak

DeviceInformation-objecten

Als u met de opsommings-API's werkt, moet u vaak DeviceInformation-objecten gebruiken. Deze objecten bevatten de meeste beschikbare informatie over het apparaat. In de volgende tabel worden enkele eigenschappen van DeviceInformation uitgelegd waarin u geïnteresseerd bent. Zie de referentiepagina voor DeviceInformation voor een volledige lijst.

Property Comments
DeviceInformation.Id Dit is de unieke id van het apparaat en wordt geleverd als een tekenreeksvariabele. In de meeste gevallen is dit een ondoorzichtige waarde die u gewoon van de ene methode naar de andere doorgeeft om aan te geven in welk specifiek apparaat u geïnteresseerd bent. U kunt deze eigenschap en de eigenschap DeviceInformation.Kind ook gebruiken nadat u de app hebt afgesloten en opnieuw hebt geopend. Dit zorgt ervoor dat u hetzelfde DeviceInformation kunt herstellen en opnieuw kunt gebruiken.
DeviceInformation.Kind Dit geeft het type apparaatobject aan dat wordt vertegenwoordigd door het object DeviceInformation. Dit is niet de apparaatcategorie of het type apparaat. Eén apparaat kan worden vertegenwoordigd door verschillende DeviceInformation-objecten van verschillende soorten. De mogelijke waarden voor deze eigenschap worden vermeld in DeviceInformationKind en hoe deze zich verhouden tot elkaar.
DeviceInformation.Properties Deze verzameling eigenschappen bevat informatie die wordt opgevraagd voor het object DeviceInformation. De meest voorkomende eigenschappen worden eenvoudig verwezen als eigenschappen van het DeviceInformation-object , zoals met DeviceInformation.Name. Zie Apparaatinformatie-eigenschappen voor meer informatie.

 

DevicePicker-gebruikersinterface

De DevicePicker is een besturingselement dat wordt geleverd door Windows waarmee een kleine gebruikersinterface wordt gemaakt waarmee de gebruiker een apparaat in een lijst kan selecteren. Het kan op een aantal manieren worden aangepast, zoals:

  • Bepaal welke apparaten in de UI worden weergegeven door een SupportedDeviceSelectors, een SupportedDeviceClasses of beide toe te voegen aan DevicePicker.Filter. In de meeste gevallen hoeft u slechts één selector of klasse toe te voegen, maar als u meer dan één klasse nodig hebt, kunt u er meerdere toevoegen. Als u meerdere selectors of klassen toevoegt, worden deze samengevoegd met behulp van een OR-logische functie.
  • Geef de eigenschappen op die u voor de apparaten wilt ophalen. U kunt dit doen door eigenschappen toe te voegen aan DevicePicker.RequestedProperties.
  • Wijzig het uiterlijk van de DevicePicker met behulp van Appearance.
  • Geef de grootte en locatie op van de DevicePicker wanneer deze wordt weergegeven.

Terwijl de DevicePicker wordt weergegeven, wordt de inhoud van de gebruikersinterface automatisch bijgewerkt als apparaten worden toegevoegd, verwijderd of bijgewerkt.

Note

U kunt de DeviceInformationKind niet opgeven met de DevicePicker. Als u apparaten van een specifieke DeviceInformationKind wilt hebben, moet u een DeviceWatcher bouwen en uw eigen gebruikersinterface opgeven.

Het casten van media en DIAL bieden beide ook hun eigen selectievensters als u daar gebruik van wilt maken. Ze zijn respectievelijk CastingDevicePicker en DialDevicePicker.

Een momentopname van apparaten opsommen

In sommige scenario's is de DevicePicker niet geschikt voor uw behoeften en hebt u iets flexibeler nodig. Misschien wilt u uw eigen gebruikersinterface bouwen of apparaten opsommen zonder een gebruikersinterface voor de gebruiker weer te geven. In deze situaties kunt u een momentopname van de apparaten opsommen. Dit omvat het bekijken van de apparaten die momenteel zijn verbonden met of zijn gekoppeld aan het systeem. U moet er echter rekening mee houden dat met deze methode alleen wordt gekeken naar een momentopname van apparaten die beschikbaar zijn, zodat u geen apparaten kunt vinden die verbinding maken nadat u de lijst hebt opgesomd. U ontvangt ook geen melding als een apparaat wordt bijgewerkt of verwijderd. Een ander potentieel nadeel waar u rekening mee moet houden, is dat deze methode alle resultaten zal tegenhouden totdat de volledige opsomming is voltooid. Daarom moet u deze methode niet gebruiken wanneer u geïnteresseerd bent in AssociationEndpoint-, AssociationEndpointContainer- of AssociationEndpointService-objecten omdat deze zijn gevonden via een netwerk of draadloos protocol. Dit kan tot 30 seconden duren. In dat scenario moet u een DeviceWatcher gebruiken om de mogelijke apparaten te inventariseren.

Gebruik de methode FindAllAsync om de apparaten in een momentopname op te sommen. Deze methode wacht totdat het hele opsommingsproces is voltooid en retourneert alle resultaten als één DeviceInformationCollection-object . Deze methode is ook overbelast om u verschillende opties te bieden voor het filteren van uw resultaten en om deze te beperken tot de apparaten waarin u geïnteresseerd bent. U kunt dit doen door een DeviceClass op te geven of door een apparaatselector door te geven. De apparaatkiezer is een AQS-tekenreeks (Advanced Query Syntax) waarmee de apparaten worden opgegeven die u wilt inventariseren. Zie Een apparaatkiezer bouwen voor meer informatie.

Naast het beperken van de resultaten kunt u ook de eigenschappen opgeven die u voor de apparaten wilt ophalen. Als u dit doet, zijn de opgegeven eigenschappen beschikbaar in de eigenschappenverzameling voor elk van de DeviceInformation objecten die in de verzameling worden geretourneerd. Het is belangrijk te weten dat niet alle eigenschappen beschikbaar zijn voor alle soorten apparaten. Zie De eigenschappen van apparaatgegevens om te zien welke eigenschappen beschikbaar zijn voor welke apparaattypen.

Apparaten inventariseren en bekijken

Een krachtigere en flexibele methode voor het inventariseren van apparaten is het maken van een DeviceWatcher. Deze optie biedt de meeste flexibiliteit wanneer u apparaten opsommen. Hiermee kunt u apparaten opsommen die momenteel aanwezig zijn en ook meldingen ontvangen wanneer apparaten die overeenkomen met de apparaatkiezer, worden toegevoegd, verwijderd of gewijzigd. Wanneer u een DeviceWatcher maakt, geeft u een apparaatkiezer op. Zie Een apparaatkiezer bouwen voor meer informatie over apparaatkiezers. Nadat u de watcher hebt gemaakt, ontvangt u de volgende meldingen voor elk apparaat dat voldoet aan uw opgegeven criteria.

  • Melding toevoegen wanneer een nieuw apparaat wordt toegevoegd.
  • Ontvang een melding wanneer een eigenschap waarin u geïnteresseerd bent, wordt gewijzigd.
  • Verwijder een melding wanneer een apparaat niet meer beschikbaar is of niet meer overeenkomt met uw filter.

In de meeste gevallen waarin u een DeviceWatcher gebruikt, onderhoudt u een lijst met apparaten en voegt u deze toe, verwijdert u items uit of werkt u items bij terwijl uw watcher updates ontvangt van de apparaten die u bekijkt. Wanneer u een updatemelding ontvangt, is de bijgewerkte informatie beschikbaar als een DeviceInformationUpdate-object . Als u de lijst met apparaten wilt bijwerken, zoekt u eerst de juiste DeviceInformation die is gewijzigd. Roep vervolgens de updatemethode voor dat object aan, waarbij het DeviceInformationUpdate-object wordt opgegeven. Dit is een handige functie waarmee uw DeviceInformation-object automatisch wordt bijgewerkt.

Aangezien een DeviceWatcher meldingen verzendt wanneer apparaten binnenkomen en wanneer ze worden gewijzigd, moet u deze methode gebruiken om apparaten te inventariseren wanneer u geïnteresseerd bent in AssociationEndpoint, AssociationEndpointContainer of AssociationEndpointService objecten omdat ze zijn opgesomd via netwerken of draadloze protocollen.

Als u een DeviceWatcher wilt maken, gebruikt u een van de methoden CreateWatcher. Deze methoden zijn overladen om u in staat te stellen de apparaten te specificeren waarin u geïnteresseerd bent. U kunt dit doen door een DeviceClass op te geven of door een apparaatselector door te geven. De apparaatkiezer is een AQS-tekenreeks waarmee de apparaten worden opgegeven die u wilt inventariseren. Zie Een apparaatkiezer bouwen voor meer informatie. U kunt ook de eigenschappen opgeven die u wilt ophalen voor de apparaten en waarin u geïnteresseerd bent. Als u dit doet, zijn de opgegeven eigenschappen beschikbaar in de eigenschappenverzameling voor elk van de DeviceInformation objecten die in de verzameling worden geretourneerd. Het is belangrijk te weten dat niet alle eigenschappen beschikbaar zijn voor alle soorten apparaten. Als u wilt zien welke eigenschappen beschikbaar zijn voor welke apparaattypen, raadpleegt u eigenschappen van apparaatgegevens

Apparaten als achtergrondtaak bekijken

Apparaten als achtergrondtaak bekijken, zijn vergelijkbaar met het maken van een DeviceWatcher zoals hierboven beschreven. In feite moet u nog steeds eerst een normaal DeviceWatcher-object maken, zoals beschreven in de vorige sectie. Zodra u deze hebt gemaakt, roept u GetBackgroundTrigger aan in plaats van DeviceWatcher.Start. Wanneer u GetBackgroundTrigger aanroept, moet u opgeven in welke van de meldingen waarin u geïnteresseerd bent: toevoegen, verwijderen of bijwerken. U kunt geen update aanvragen of verwijderen zonder ook een add-aanvraag aan te vragen. Zodra u de trigger registreert, wordt DeviceWatcher direct op de achtergrond uitgevoerd. Vanaf dit moment wordt, wanneer deze een nieuwe melding ontvangt voor uw toepassing die voldoet aan uw criteria, de achtergrondtaak geactiveerd en ontvangt u de meest recente wijzigingen sinds de toepassing voor het laatst is geactiveerd.

Important

De eerste keer dat een DeviceWatcherTrigger uw toepassing activeert, is wanneer de watcher de status EnumerationCompleted bereikt. Dit betekent dat deze alle initiële resultaten bevat. Wanneer deze in de toekomst uw toepassing activeert, bevat deze alleen de meldingen voor toevoegen, bijwerken en verwijderen die zijn opgetreden sinds de laatste trigger. Dit verschilt enigszins van een voorgrond DeviceWatcher object omdat de eerste resultaten niet één voor één binnenkomen en alleen in een bundel worden geleverd na de EnumerationCompleted is bereikt.

Sommige draadloze protocollen gedragen zich anders als ze op de achtergrond scannen versus de voorgrond, of ze ondersteunen het scannen op de achtergrond helemaal niet. Er zijn drie mogelijkheden met betrekking tot achtergrondscans. De volgende tabel bevat de mogelijkheden en de effecten die dit voor uw toepassing kan hebben. Bluetooth en Wi-Fi Direct bieden bijvoorbeeld geen ondersteuning voor achtergrondscans, dus ze ondersteunen geen DeviceWatcherTrigger.

Behavior Invloed
Hetzelfde gedrag op de achtergrond Geen
Alleen passieve scans mogelijk op de achtergrond Het kan langer duren voordat het apparaat wordt gevonden in afwachting van een passieve scan.
Achtergrondscans worden niet ondersteund Er kunnen geen apparaten worden gedetecteerd door de DeviceWatcherTrigger en er worden geen updates gerapporteerd.

 Als uw DeviceWatcherTrigger een protocol bevat dat scannen niet ondersteunt als achtergrondtaak, werkt uw trigger nog steeds. U kunt echter geen updates of resultaten ophalen via dat protocol. De updates voor andere protocollen of apparaten worden nog steeds normaal gedetecteerd.

DeviceInformationKind gebruiken

In de meeste scenario's hoeft u zich geen zorgen te maken over de DeviceInformationKind van een DeviceInformation-object. Dit komt doordat de apparaatkiezer die wordt geretourneerd door de apparaat-API die u gebruikt, vaak garandeert dat u de juiste soorten apparaatobjecten krijgt die u met hun API kunt gebruiken. In sommige scenario's wilt u de DeviceInformation voor apparaten ophalen, maar er is geen bijbehorende apparaat-API om een apparaatkiezer te bieden. In deze gevallen moet u uw eigen selector bouwen. Webservices op apparaten hebben bijvoorbeeld geen toegewezen API, maar u kunt deze apparaten detecteren en informatie over deze apparaten ophalen met behulp van de Windows. Devices.Enumeration API's en deze vervolgens gebruiken met behulp van de socket-API's.

Als u uw eigen apparaatselector maakt om apparaatobjecten op te sommen, dan is DeviceInformationKind belangrijk om te begrijpen. Alle mogelijke soorten, evenals hoe ze zich met elkaar verhouden, worden beschreven op de referentiepagina voor DeviceInformationKind. Een van de meest voorkomende toepassingen van DeviceInformationKind is om op te geven wat voor soort apparaten u zoekt bij het verzenden van een query in combinatie met een apparaatkiezer. Door dit te doen, wordt ervoor gezorgd dat u alleen itereert over apparaten die overeenkomen met het opgegeven DeviceInformationKind. U kunt bijvoorbeeld een DeviceInterface-object vinden en vervolgens een query uitvoeren om de informatie voor het bovenliggende apparaatobject op te halen. Dit bovenliggende object kan aanvullende informatie bevatten.

Het is belangrijk te weten dat de eigenschappen die beschikbaar zijn in de eigenschappentas voor een DeviceInformation object variëren, afhankelijk van de DeviceInformationKind van het apparaat. Bepaalde eigenschappen zijn alleen beschikbaar met bepaalde soorten. Zie Apparaatinformatie-eigenschappen voor meer informatie over welke eigenschappen beschikbaar zijn voor welke soorten. Dus krijgt u in het bovenstaande voorbeeld, wanneer u zoekt naar het bovenliggende Device, toegang tot meer informatie die niet beschikbaar was vanuit het apparaatobject DeviceInterface. Als u hierdoor uw AQS-filtertekenreeksen maakt, is het belangrijk om ervoor te zorgen dat de aangevraagde eigenschappen beschikbaar zijn voor de DeviceInformationKind-objecten die u opsommen. Zie Een apparaatkiezer bouwen voor meer informatie over het bouwen van een filter.

Wanneer u AssociationEndpoint-, AssociationEndpointContainer- of AssociationEndpointService-objecten inventariseert, doet u dat via een draadloos protocol of netwerkprotocol. In deze situaties wordt u aangeraden FindAllAsync niet te gebruiken en in plaats daarvan CreateWatcher te gebruiken. Dit komt doordat zoeken via een netwerk vaak resulteert in zoekbewerkingen die geen time-out van 10 of meer seconden opleveren voordat opsommingCompleted wordt gegenereerd. FindAllAsync voltooit de bewerking pas nadat EnumerationCompleted is geactiveerd. Als u een DeviceWatcher gebruikt, krijgt u resultaten dichter bij realtime, ongeacht wanneer EnumerationCompleted wordt aangeroepen.

Een apparaat opslaan voor later gebruik

Elk DeviceInformation object wordt uniek geïdentificeerd door een combinatie van twee gegevens: DeviceInformation.Id en DeviceInformation.Kind. Als u deze twee stukjes informatie bewaart, kunt u een DeviceInformation-object opnieuw maken nadat het is verloren gegaan door deze informatie op te geven aan CreateFromIdAsync. Als u dit doet, kunt u gebruikersvoorkeuren opslaan voor een apparaat dat is geïntegreerd met uw app.