Dela via


Skapa en enhetsbakgrundsaktivitet i Windows 8.1 (UWP-enhetsappar)

Viktigt!

Enhetsmetadata är inaktuella och tas bort i en framtida version av Windows. Information om hur du ersätter den här funktionen finns i Containermetadata för drivrutinspaket.

UWP-appen kan synkronisera data på din kringutrustningsenhet. Om din app är associerad med enhetsmetadata kan UWP-enhetsappen också utföra enhetsuppdateringar, till exempel uppdateringar av inbyggd programvara. Den här artikeln beskriver hur du skapar en enhetsbakgrundsaktivitet som använder DeviceUseTrigger eller DeviceServicingTrigger. Enhetsbakgrundsagenter som använder dessa utlösare omfattas av principer som säkerställer användarens medgivande och hjälper till att bevara batteritiden medan enheterna synkroniseras och uppdateras. Mer information om enhetsbakgrundsuppgifter finns i Enhetssynkronisering och uppdatering för UWP-enhetsappar.

Den här artikeln motsvarar exemplet på anpassad USB-enhet. Exemplet på anpassad USB-enhet visar en bakgrundsaktivitet som utför enhetssynkronisering med DeviceUseTrigger.

Även om enhetens bakgrundsaktivitet i exemplet på anpassad USB-enhet har en DeviceUseTrigger, kan allt som beskrivs i den här artikeln även tillämpas på bakgrundsuppgifter för enheter som använder DeviceServicingTrigger. Den enda skillnaden mellan att använda de två utlösarna är de principkontroller som görs av Windows.

Appmanifestet

Om du vill använda en bakgrundsaktivitet för enhet måste din app deklarera den i manifestfilen för applikationen, precis som för systemstartade bakgrundsaktiviteter. Mer information finns i Enhetssynkronisering och uppdatering för UWP-enhetsappar.

I det här exemplet från en apppaketmanifestfil är DeviceLibrary.SyncContent en startpunkt från förgrundsappen. DeviceLibrary.SyncContent är startpunkten för bakgrundsaktiviteten som använder DeviceUseTrigger.

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

Enhetens bakgrundsaktivitet

Aktivitetsklassen för enhetsbakgrund implementerar IBackgroundTask-gränssnittet och innehåller den faktiska kod som du skapar för att antingen synkronisera eller uppdatera kringutrustningen. Bakgrundsaktivitetsklassen körs när bakgrundsaktiviteten utlöses och från startpunkten som anges i appens programmanifest.

Enhetens bakgrundsklass i exempel på en anpassad USB-enhet innehåller koden för att utföra en synkronisering till en USB-enhet genom DeviceUseTrigger bakgrundsuppgift. Om du vill ha fullständig information laddar du ned exemplet. Mer information om hur du implementerar IBackgroundTask och bakgrundsaktivitetsinfrastrukturen i Windows finns i Stöd för din app med bakgrundsaktiviteter.

Viktiga delar av enhetens bakgrundsaktivitet i exempel på anpassad USB-enhet inkluderar:

  1. Klassen IoSyncBackgroundTask implementerar det IBackgroundTask gränssnitt som krävs av Windows bakgrundsaktivitetsinfrastruktur.

  2. Klassen IoSyncBackgroundTask hämtar den DeviceUseDetails-instans som skickas till klassen i Kör-metoden för IoSyncBackgroundTask-klassen och använder denna instans för att rapportera förloppet tillbaka till Microsoft Store-appen samt för att registrera för avbokningshändelser.

  3. I IoSyncBackgroundTask-klassens Kör-metod anropas även de privata OpenDevice och WriteToDeviceAsync metoder som implementerar synkroniseringskoden för bakgrundsenheter.

Förgrundsappen

Förgrundsappen i det anpassade USB-enhetsexemplet registrerar och utlöser en enhetsbakgrundsaktivitet som använder DeviceUseTrigger. Det här avsnittet innehåller en översikt över de steg som din förgrundsapp vidtar för att registrera, utlösa och hantera förlopp för en enhetsbakgrundsaktivitet.

Förgrundsappen i Anpassat USB-enhetsexempel utför följande steg för att använda en enhetsbakgrundsuppgift:

  1. Skapar nya DeviceUseTrigger-- och BackgroundTaskRegistration-objekt.

  2. Kontrollerar om några bakgrundsaktiviteter tidigare har registrerats av den här appen och avbryter dem genom att anropa metoden BackgroundTaskRegistration.Unregister för aktiviteten.

  3. Den privata SetupBackgroundTask-metoden registrerar bakgrundsaktiviteten som ska synkroniseras med enheten. Metoden SetupBackgroundTask anropas från metoden SyncWithDeviceAsync i nästa steg.

    1. Initierar DeviceUseTrigger och sparar den för senare användning.

    2. Skapar ett nytt BackgroundTaskBuilder-objekt och använder dess egenskaper och metod Name, TaskEntryPoint och SetTrigger för att registrera appens DeviceUseTrigger objekt- och bakgrundsaktivitetsnamn. Objektet BackgroundTaskBuilder:s egenskap TaskEntryPoint sätts till det fullständiga namnet på bakgrundsuppgiftsklassen som ska köras när bakgrundsuppgiften utlöses.

    3. Registrerar för slutförande- och förloppshändelser från bakgrundsaktiviteten så att förgrundsappen kan tillhandahålla slutförande- och förloppsuppdateringar till användaren.

  4. Den privata SyncWithDeviceAsync-metoden registrerar bakgrundsaktiviteten som ska synkroniseras med enheten och startar bakgrundssynkroniseringen.

    1. Anropar metoden SetupBackgroundTask från föregående steg och registrerar bakgrundsaktiviteten som ska synkroniseras med enheten.

    2. Anropar metoden private StartSyncBackgroundTaskAsync som startar bakgrundsaktiviteten. Den metoden stänger appens handtag till enheten för att säkerställa att bakgrundsaktiviteten kan öppna enheten när den startas.

      Viktigt!

      Bakgrundsaktiviteten måste öppna enheten för att utföra uppdateringen, så förgrundsappen måste stänga sina anslutningar till enheten innan den anropar RequestAsync.

    Sedan anropar metoden StartSyncBackgroundTaskAsyncDeviceUseTrigger-objektets RequestAsync-metod, vilket utlöser bakgrundsaktiviteten och returnerar DeviceTriggerResults-objektet som hämtats från RequestAsync, vilket används för att avgöra om bakgrundsaktiviteten har startat framgångsrikt.

    Viktigt!

    Windows-kontroller för att säkerställa att alla nödvändiga principkontroller för aktivitetsinitiering har slutförts. Om alla principkontroller har slutförts körs uppdateringsåtgärden nu som en bakgrundsaktivitet utanför förgrundsappen, vilket gör att appen kan pausas på ett säkert sätt medan åtgärden pågår. Windows tillämpar även alla körningskrav och avbryter bakgrundsaktiviteten om dessa krav inte längre uppfylls.

  5. Slutligen använder metoden SyncWithDeviceAsync det DeviceTriggerResults objekt som returneras från StartSyncBackgroundTaskAsync för att avgöra om bakgrundsaktiviteten startade. En switch-instruktion används för att inspektera resultatet från DeviceTriggerResults

  6. Förgrundsappen implementerar en privat OnSyncWithDeviceProgress händelsehanterare som uppdaterar appens användargränssnitt med förlopp från enhetens bakgrundsaktivitet.

  7. Förgrundsappen implementerar en privat OnSyncWithDeviceCompleted händelsehanterare för att hantera övergången från bakgrundsaktiviteter till förgrundsapp när bakgrundsaktiviteten har slutförts.

    1. Använder CheckResults-metoden för BackgroundTaskCompletedEventArgs-objektet för att avgöra om några undantag utlöstes av bakgrundsaktiviteten.

    2. Förgrundsappen öppnar enheten igen för användning av appen nu när bakgrundsaktiviteten är klar och uppdaterar användargränssnittet för att meddela användaren.

  8. Förgrundsappen implementerar privata händelsehanterare för knapptryck från användargränssnittet för att starta och avbryta bakgrundsuppgiften.

    1. Den privata Sync_Click-händelsehanteraren anropar metoden SyncWithDeviceAsync som beskrivs i föregående steg.

    2. Den privata CancelSync_Click-händelsehanteraren anropar den privata CancelSyncWithDevice-metoden för att avbryta bakgrundsaktiviteten.

  9. Den privata CancelSyncWithDevice-metoden avregistrerar och avbryter alla aktiva enhetssynkroniseringar så att enheten kan öppnas igen med hjälp av metoden BackgroundTaskRegistration.Unregister.