Sdílet prostřednictvím


Vytvoření úlohy na pozadí zařízení ve Windows 8.1 (aplikace pro zařízení s UPW)

Důležité

Metadata zařízení jsou zastaralá a budou odebrána v budoucí verzi Windows. Informace o nahrazení této funkce naleznete v tématu Metadata kontejneru balíčku ovladačů.

Aplikace UPW může synchronizovat data na periferním zařízení. Pokud je vaše aplikace přidružená k metadatem zařízení, může tato aplikace zařízení pro UPW také provádět aktualizace zařízení, jako jsou aktualizace firmwaru. Tento článek popisuje, jak vytvořit úlohu na pozadí zařízení, která používá DeviceUseTrigger nebo DeviceServicingTrigger. Agenti na pozadí zařízení, kteří tyto triggery používají, podléhají zásadám, které zajišťují souhlas uživatele a pomáhají zachovat životnost baterie při synchronizaci a aktualizaci zařízení. Další informace o úlohách na pozadí zařízení najdete v tématu Synchronizace a aktualizace zařízení pro UWP aplikace zařízení.

Tento článek se shoduje s ukázkovým zařízením USB na míru. Ukázkový příklad vlastního USB zařízení předvádí úlohu běžící na pozadí, která provádí synchronizaci zařízení pomocí DeviceUseTrigger.

I když úloha na pozadí zařízení v ukázce vlastního zařízení USB obsahuje DeviceUseTrigger, všechno, co je popsáno v tomto článku, lze použít také na úlohy na pozadí zařízení, které používají DeviceServicingTrigger. Jediným rozdílem mezi použitím těchto dvou triggerů jsou kontroly zásad provedené systémem Windows.

Manifest aplikace

Pokud chcete použít úlohu na pozadí zařízení, aplikace ji musí deklarovat v souboru manifestu aplikace v popředí, jako je tomu u úloh na pozadí aktivovaných systémem. Další informace najdete v tématu Synchronizace a aktualizace zařízení pro aplikace zařízení pro UPW.

V tomto příkladu ze souboru manifestu balíčku aplikace je DeviceLibrary.SyncContent vstupním bodem z popředí aplikace. DeviceLibrary.SyncContent je vstupním bodem pro úlohu na pozadí, která používá DeviceUseTrigger.

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

Úloha na pozadí zařízení

Třída úloh na pozadí zařízení implementuje IBackgroundTask rozhraní a obsahuje skutečný kód, který vytvoříte pro synchronizaci nebo aktualizaci periferního zařízení. Třída úlohy na pozadí se spustí při aktivaci úlohy na pozadí a ze vstupního bodu určeného v manifestu vaší aplikace.

Třída pozadí zařízení v ukázce vlastního zařízení USB obsahuje kód pro provedení synchronizace se zařízením USB pomocí úlohy DeviceUseTrigger na pozadí. Úplné podrobnosti získáte stažením ukázky. Další informace o implementaci IBackgroundTask a infrastruktuře úloh na pozadí systému Windows najdete v tématu Podpora aplikace pomocí úloh na pozadí.

Mezi klíčové části úlohy na pozadí zařízení ve vlastní ukázce zařízení USB patří:

  1. Třída IoSyncBackgroundTask implementuje IBackgroundTask rozhraní vyžadované infrastrukturou úloh na pozadí systému Windows.

  2. Třída IoSyncBackgroundTask získá instanci DeviceUseDetails, která je předána této třídě v metodě Run třídy IoSyncBackgroundTask, a tuto instanci používá k hlášení průběhu zpět do aplikace Microsoft Store a k registraci zrušených událostí.

  3. IoSyncBackgroundTask metoda třídy Run také volá privátní metody OpenDevice a WriteToDeviceAsync, které implementují kód synchronizace zařízení na pozadí.

Aplikace na popředí

Aplikace na popředí v ukázce vlastního zařízení USB zaregistruje a aktivuje úlohu na pozadí zařízení, která používá DeviceUseTrigger. Tato část obsahuje přehled kroků, které vaše aplikace v popředí provede při registraci, aktivaci a zpracování průběhu úlohy na pozadí zařízení.

Aplikace v popředí ve vzorku vlastního zařízení USB provede následující kroky pro využití úlohy na pozadí zařízení:

  1. Vytvoří nové DeviceUseTrigger a BackgroundTaskRegistration objekty.

  2. Zkontroluje, jestli byly touto aplikací dříve zaregistrovány nějaké úlohy na pozadí a zruší je voláním metody BackgroundTaskRegistration.Unregister pro úlohu.

  3. Privátní SetupBackgroundTask metoda zaregistruje úlohu na pozadí, která se bude synchronizovat se zařízením. Metoda SetupBackgroundTask se volá z SyncWithDeviceAsync metody v dalším kroku.

    1. Inicializuje DeviceUseTrigger a uloží ho pro pozdější použití.

    2. Vytvoří nový BackgroundTaskBuilder objekt a použije jeho NameTaskEntryPoint vlastnosti a SetTrigger metodu k registraci objektu DeviceUseTrigger aplikace a názvu úlohy na pozadí. BackgroundTaskBuilder Vlastnost objektu TaskEntryPoint je nastavena na úplný název třídy úloh na pozadí, která se spustí při aktivaci úlohy na pozadí.

    3. Zaregistruje události dokončení a průběhu ze zpracování na pozadí, aby aplikace na popředí mohla uživateli poskytovat informace o dokončení a průběhu.

  4. Privátní SyncWithDeviceAsync metoda zaregistruje úlohu na pozadí, která se synchronizuje se zařízením a spustí synchronizaci na pozadí.

    1. Zavolá metodu SetupBackgroundTask z předchozího kroku a zaregistruje úlohu na pozadí, která se bude synchronizovat se zařízením.

    2. Volá soukromou StartSyncBackgroundTaskAsync metodu, která spouští úlohu na pozadí. Tato metoda uzavře popisovač zařízení aplikace, aby zajistila, že úloha na pozadí může zařízení otevřít při svém spuštění.

      Důležité

      Úloha na pozadí bude muset otevřít zařízení k provedení aktualizace, aby aplikace popředí musela před voláním RequestAsynczavřít svá připojení k zařízení .

    Dále metoda StartSyncBackgroundTaskAsync volá metodu objektu DeviceUseTriggerRequestAsync, která spustí úlohu na pozadí a vrátí objekt DeviceTriggerResults z RequestAsync použitý k určení, zda byla úloha na pozadí úspěšně spuštěna.

    Důležité

    Systém Windows kontroluje, zda byly dokončeny všechny nezbytné kontroly zásad spuštění úlohy. Pokud jsou všechny kontroly zásad dokončeny, operace aktualizace je nyní spuštěna jako úloha na pozadí mimo aplikaci na popředí, což aplikaci umožňuje bezpečně pozastavit během probíhající operace. Systém Windows také vynucuje všechny požadavky na modul runtime a zruší úlohu na pozadí, pokud už tyto požadavky nejsou splněné.

  5. Nakonec metoda SyncWithDeviceAsync používá DeviceTriggerResults objekt vrácený StartSyncBackgroundTaskAsync k určení, zda byla úloha na pozadí úspěšně spuštěna. Příkaz switch slouží ke kontrole výsledku z DeviceTriggerResults

  6. Aplikace na popředí implementuje obslužnou rutinu privátní OnSyncWithDeviceProgress události, která aktualizuje uživatelské rozhraní aplikace průběhem úlohy, která běží na pozadí zařízení.

  7. Aplikace na popředí implementuje obslužnou rutinu soukromé OnSyncWithDeviceCompleted události pro zpracování přechodu z úloh na pozadí na aplikaci v popředí, když je úloha na pozadí dokončena.

    1. CheckResults Používá metodu objektu BackgroundTaskCompletedEventArgs k určení, zda byly nějaké výjimky vyvolány úlohou na pozadí.

    2. Aplikace na popředí znovu otevře zařízení, které bude aplikace používat teď, když je úloha na pozadí dokončená, a aktualizuje uživatelské rozhraní tak, aby uživatele informovala.

  8. Aplikace na popředí implementuje soukromé obslužné rutiny událostí kliknutí na tlačítko z uživatelského rozhraní pro spuštění a zrušení úlohy na pozadí.

    1. Obslužná rutina privátní Sync_Click události volá metodu SyncWithDeviceAsync popsanou v předchozích krocích.

    2. Privátní obslužná rutina CancelSync_Click události volá privátní CancelSyncWithDevice metodu ke zrušení úlohy na pozadí.

  9. Privátní CancelSyncWithDevice metoda zruší registraci a zruší všechny aktivní synchronizace zařízení, aby bylo možné zařízení znovu otevřít pomocí metody BackgroundTaskRegistration.Unregister .