Delen via


Een apparaatachtergrondtaak maken in Windows 8.1 (UWP-apparaatapps)

Belangrijk

Metagegevens van apparaten zijn afgeschaft en worden verwijderd in een toekomstige versie van Windows. Zie Containermetagegevens voor stuurprogrammapakketten voor informatie over de vervanging voor deze functionaliteit.

Uw UWP-app kan gegevens synchroniseren op uw randapparaat. Als uw app is gekoppeld aan apparaatmetagegevens, kan die UWP-apparaat-app ook apparaatupdates uitvoeren, zoals firmware-updates. In dit artikel wordt beschreven hoe u een achtergrondtaak voor apparaten maakt die gebruikmaakt van DeviceUseTrigger of DeviceServicingTrigger. Agents op de achtergrond van apparaten die deze triggers gebruiken, zijn onderworpen aan beleidsregels die ervoor zorgen dat gebruikers toestemming geven en de levensduur van de batterij kunnen behouden terwijl apparaten worden gesynchroniseerd en bijgewerkt. Zie Apparaatsynchronisatie en -update voor UWP-apparaat-apps voor meer informatie over achtergrondtaken voor apparaten.

Dit artikel komt overeen met het voorbeeld van een aangepast USB-apparaat. Het voorbeeld van een aangepast USB-apparaat demonstreert een achtergrondtaak die apparaatsynchronisatie uitvoert met de DeviceUseTrigger.

Hoewel de achtergrondtaak van het apparaat in het voorbeeld van het aangepaste USB-apparaat een DeviceUseTrigger bevat, kan alles dat in dit artikel wordt besproken, ook worden toegepast op achtergrondtaken van apparaten die gebruikmaken van DeviceServicingTrigger. Het enige verschil tussen het gebruik van de twee triggers zijn de beleidscontroles die door Windows worden uitgevoerd.

Het app-manifest

Als u een achtergrondtaak voor een apparaat wilt gebruiken, moet uw app deze declareren in het app-manifestbestand van uw voorgrond-app, zoals wordt gedaan voor door het systeem geactiveerde achtergrondtaken. Zie Apparaatsynchronisatie en -update voor UWP-apparaat-apps voor meer informatie.

In dit voorbeeld van een manifestbestand voor een app-pakket is DeviceLibrary.SyncContent een toegangspunt vanuit de voorgrond-app. DeviceLibrary.SyncContent is het toegangspunt voor de achtergrondtaak die gebruikmaakt van DeviceUseTrigger.

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" /> 
    </BackgroundTasks>
  </Extension>
</Extensions>

De achtergrondtaak van het apparaat

De achtergrondtaakklasse van het apparaat implementeert de IBackgroundTask interface en bevat de werkelijke code die u maakt om uw randapparaat te synchroniseren of bij te werken. De achtergrondtaakklasse wordt uitgevoerd wanneer de achtergrondtaak wordt geactiveerd en vanaf het toegangspunt dat is opgegeven in het toepassingsmanifest van uw app.

De achtergrondklasse van het apparaat in het voorbeeld van het aangepaste USB-apparaat bevat de code voor het uitvoeren van een synchronisatie met een USB-apparaat met behulp van de achtergrondtaak DeviceUseTrigger . Download het voorbeeld voor volledige details. Zie IBackgroundTask voor meer informatie over het implementeren en de infrastructuur van de achtergrondtaak van Windows.

Belangrijke gedeelten van de achtergrondtaak van het apparaat in het voorbeeld van een aangepast USB-apparaat zijn onder andere:

  1. De IoSyncBackgroundTask klasse implementeert de IBackgroundTask interface die is vereist voor de Windows-achtergrondtaakinfrastructuur.

  2. De IoSyncBackgroundTask klasse verkrijgt het DeviceUseDetails exemplaar dat is doorgegeven aan de klasse in de run-methode van de IoSyncBackgroundTask klasse en gebruikt dit exemplaar om de voortgang terug te rapporteren naar de Microsoft Store-app en om zich te registreren voor annuleringsgebeurtenissen.

  3. De IoSyncBackgroundTask run-methode van de klasse roept ook de privé OpenDevice - en WriteToDeviceAsync methoden aan waarmee de synchronisatiecode van het achtergrondapparaat wordt geïmplementeerd.

De voorgrond-app

De voorgrond-app in het voorbeeld van het aangepaste USB-apparaat registreert en activeert een achtergrondtaak voor apparaten die gebruikmaakt van DeviceUseTrigger. In deze sectie vindt u een overzicht van de stappen die uw voorgrond-app moet uitvoeren om de voortgang van een achtergrondtaak voor een apparaat te registreren, te activeren en te verwerken.

De voorgrond-app in het voorbeeld van het aangepaste USB-apparaat voert de volgende stappen uit om een achtergrondtaak voor een apparaat te gebruiken:

  1. Hiermee maakt u nieuwe DeviceUseTrigger en BackgroundTaskRegistration objecten.

  2. Controleert of er eerder achtergrondtaken zijn geregistreerd door deze app en annuleert ze door de methode BackgroundTaskRegistration.Unregister voor de taak aan te roepen.

  3. De privémethode SetupBackgroundTask registreert de achtergrondtaak die met het apparaat wordt gesynchroniseerd. De SetupBackgroundTask methode wordt aangeroepen vanuit de SyncWithDeviceAsync methode in de volgende stap.

    1. Initialiseert de DeviceUseTrigger en slaat deze op voor later gebruik.

    2. Hiermee maakt u een nieuw BackgroundTaskBuilder-object en gebruikt u de Name, TaskEntryPoint en SetTrigger-eigenschappen en methode om het DeviceUseTrigger-object van de app en de achtergrondtaaknaam te registreren. De BackgroundTaskBuilder eigenschap van TaskEntryPoint het object is ingesteld op de volledige naam van de achtergrondtaakklasse die wordt uitgevoerd wanneer de achtergrondtaak wordt geactiveerd.

    3. Meldt zich aan voor voltooiings- en voortgangsevenementen van de achtergrondtaak, zodat de voorgrond-app een update van voltooiing en voortgang aan de gebruiker kan bieden.

  4. De privémethode SyncWithDeviceAsync registreert de achtergrondtaak die wordt gesynchroniseerd met het apparaat en start de achtergrondsynchronisatie.

    1. Roept de SetupBackgroundTask methode aan uit de vorige stap en registreert de achtergrondtaak die met het apparaat wordt gesynchroniseerd.

    2. Roept de privémethode StartSyncBackgroundTaskAsync aan waarmee de achtergrondtaak wordt gestart. Met deze methode sluit u de ingang van de app aan het apparaat om ervoor te zorgen dat de achtergrondtaak het apparaat kan openen wanneer het wordt gestart.

      Belangrijk

      De achtergrondtaak moet het apparaat openen om de update uit te voeren. Daarom moet de voorgrond-app zijn verbindingen met het apparaat sluiten voordat RequestAsync wordt aangeroepen.

    Vervolgens roept de StartSyncBackgroundTaskAsync-methode de DeviceUseTrigger-methode van het RequestAsync-object aan, die de achtergrondtaak opstart en activeert en het DeviceTriggerResults-object vanuit RequestAsync retourneert, gebruikt om te bepalen of de achtergrondtaak succesvol is gestart.

    Belangrijk

    Windows controleert of alle benodigde beleidscontroles voor het starten van taken zijn voltooid. Als alle beleidscontroles zijn voltooid, wordt de updatebewerking nu uitgevoerd als achtergrondtaak buiten de voorgrond-app, zodat de app veilig kan worden onderbroken terwijl de bewerking wordt uitgevoerd. Windows zal ook uitvoeringsvereisten afdwingen en de achtergrondtaak annuleren als niet meer aan deze vereisten wordt voldaan.

  5. Ten slotte gebruikt de SyncWithDeviceAsync methode het DeviceTriggerResults object dat door StartSyncBackgroundTaskAsync is geretourneerd om te bepalen of de achtergrondtaak succesvol is gestart. Er wordt een switch-instructie gebruikt om het resultaat van DeviceTriggerResults te inspecteren.

  6. De voorgrond-app implementeert een privé-gebeurtenishandler OnSyncWithDeviceProgress waarmee de gebruikersinterface van de app wordt bijgewerkt met voortgang van de achtergrondtaak van het apparaat.

  7. De voorgrond-app implementeert een privégebeurtenishandler OnSyncWithDeviceCompleted om de overgang van achtergrondtaken naar voorgrond-app af te handelen wanneer de achtergrondtaak is voltooid.

    1. Hiermee wordt de CheckResults methode van het BackgroundTaskCompletedEventArgs object gebruikt om te bepalen of er uitzonderingen zijn gegenereerd door de achtergrondtaak.

    2. De voorgrond-app opent het apparaat opnieuw voor gebruik door de app, nu de achtergrondtaak is voltooid en werkt de gebruikersinterface bij om de gebruiker op de hoogte te stellen.

  8. De voorgrond-app implementeert private klikgebeurtenisafhandelaars van de gebruikersinterface om de achtergrondtaak te starten en te annuleren.

    1. De privé-gebeurtenishandler Sync_Click roept de methode SyncWithDeviceAsync aan die in de vorige stappen is beschreven.

    2. De privé-gebeurtenishandler CancelSync_Click roept de privémethode CancelSyncWithDevice aan om de achtergrondtaak te annuleren.

  9. De persoonlijke CancelSyncWithDevice methode maakt de registratie ongedaan en annuleert actieve apparaatsynchronisaties, zodat het apparaat opnieuw kan worden geopend met behulp van de methode BackgroundTaskRegistration.Unregister .