Condividi tramite


Creazione di un'attività in background del dispositivo in Windows 8.1 (app per dispositivi UWP)

In Windows 8.1 l'app UWP può sincronizzare i dati nel dispositivo periferico. Se la tua app è associata ai metadati del dispositivo, l'app per dispositivi UWP può anche eseguire aggiornamenti del dispositivo, ad esempio gli aggiornamenti del firmware. Questo argomento descrive come creare un'attività in background del dispositivo che usa DeviceUseTrigger o DeviceServicingTrigger. Gli agenti in background del dispositivo che usano questi trigger sono soggetti a criteri che garantiscono il consenso dell'utente e consentono di mantenere la durata della batteria durante la sincronizzazione e l'aggiornamento dei dispositivi. Per altre info sulle attività in background del dispositivo, vedi Sincronizzazione e aggiornamento dei dispositivi per le app per dispositivi UWP.

Nota

Questo argomento corrisponde all'esempio di dispositivo USB personalizzato. L'esempio dispositivo USB personalizzato illustra un'attività in background che esegue la sincronizzazione del dispositivo con DeviceUseTrigger.

Anche se l'attività in background del dispositivo nell'esempio di dispositivo USB personalizzato include un DeviceUseTrigger, tutti gli elementi descritti in questo argomento possono essere applicati anche alle attività in background del dispositivo che usano DeviceServicingTrigger. L'unica differenza tra l'uso dei due trigger è costituita dai controlli dei criteri eseguiti da Windows.

Manifesto dell'app

Per usare un'attività in background del dispositivo, l'app deve dichiararla nel file manifesto dell'app in primo piano, come avviene per le attività in background attivate dal sistema. Per altre info, vedi Sincronizzazione e aggiornamento dei dispositivi per le app per dispositivi UWP.

In questo esempio da un file manifesto del pacchetto dell'app, DeviceLibrary.SyncContent è un punto di ingresso dell'app in primo piano. DeviceLibrary.SyncContent è il punto di ingresso per l'attività in background che usa DeviceUseTrigger.

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

Attività in background del dispositivo

La classe di attività in background del dispositivo implementa l'interfaccia IBackgroundTask e contiene il codice effettivo creato per sincronizzare o aggiornare il dispositivo periferico. La classe di attività in background viene eseguita quando l'attività in background viene attivata e dal punto di ingresso fornito nel manifesto dell'applicazione dell'app.

La classe in background del dispositivo nell'esempio di dispositivo USB personalizzato contiene il codice per eseguire una sincronizzazione con un dispositivo USB usando l'attività in background DeviceUseTrigger. Per informazioni dettagliate, scaricare l'esempio. Per altre info sull'implementazione IBackgroundTask e sull'infrastruttura delle attività in background di Windows, vedi Supporto dell'app con attività in background.

Le parti chiave dell'attività in background del dispositivo nell'esempio di dispositivo USB personalizzato includono:

  1. La IoSyncBackgroundTask classe implementa l'interfaccia IBackgroundTask richiesta dall'infrastruttura delle attività in background di Windows.

  2. La IoSyncBackgroundTask classe ottiene l'istanza DeviceUseDetails passata alla classe nel IoSyncBackgroundTask metodo Run della classe e usa questa istanza per segnalare lo stato di avanzamento all'app di Microsoft Store e per registrarsi per gli eventi di annullamento.

  3. Il IoSyncBackgroundTask metodo Run della classe chiama anche i metodi privati OpenDevice e WriteToDeviceAsync che implementano il codice di sincronizzazione del dispositivo in background.

App in primo piano

L'app in primo piano nell'esempio dispositivo USB personalizzato registra e attiva un'attività in background del dispositivo che usa DeviceUseTrigger. Questa sezione offre una panoramica dei passaggi che l'app in primo piano eseguirà per registrare, attivare e gestire lo stato di avanzamento per un'attività in background del dispositivo.

L'app in primo piano nell'esempio dispositivo USB personalizzato esegue i passaggi seguenti per usare un'attività in background del dispositivo:

  1. Crea nuovi oggetti DeviceUseTrigger e BackgroundTaskRegistration .

  2. Verifica se alcune attività in background sono state registrate in precedenza da questa app e le annulla chiamando il metodo BackgroundTaskRegistration.Unregister nell'attività.

  3. Il metodo privato SetupBackgroundTask registra l'attività in background che verrà sincronizzata con il dispositivo. Il SetupBackgroundTask metodo viene chiamato dal SyncWithDeviceAsync metodo nel passaggio successivo.

    1. Inizializza DeviceUseTrigger e lo salva per un uso successivo.

    2. Crea un nuovo BackgroundTaskBuilder oggetto e usa NameTaskEntryPoint le proprietà e il metodo e SetTrigger per registrare l'oggetto e il nome dell'attività in background dell'appDeviceUseTrigger. La BackgroundTaskBuilder proprietà dell'oggetto TaskEntryPoint è impostata sul nome completo della classe dell'attività in background che verrà eseguita quando viene attivata l'attività in background.

    3. Registra gli eventi di completamento e avanzamento dall'attività in background, in modo che l'app in primo piano possa fornire aggiornamenti di completamento e avanzamento all'utente.

  4. Il metodo privato SyncWithDeviceAsync registra l'attività in background che verrà sincronizzata con il dispositivo e avvia la sincronizzazione in background.

    1. Chiama il SetupBackgroundTask metodo dal passaggio precedente e registra l'attività in background che verrà sincronizzata con il dispositivo.

    2. Chiama il metodo privato StartSyncBackgroundTaskAsync che avvia l'attività in background. Questo metodo chiude l'handle dell'app al dispositivo per assicurarsi che l'attività in background sia in grado di aprire il dispositivo all'avvio.

      Importante

      L'attività in background dovrà aprire il dispositivo per eseguire l'aggiornamento in modo che l'app in primo piano debba chiudere le connessioni al dispositivo prima di chiamare RequestAsync.

    StartSyncBackgroundTaskAsync Il metodo chiama quindi il DeviceUseTrigger metodo dell'oggetto RequestAsync che avvia l'attività in background e restituisce l'oggetto DeviceTriggerResults da RequestAsync utilizzato per determinare se l'attività in background è stata avviata correttamente.

    Importante

    Controlli di Windows per assicurarsi che siano stati completati tutti i controlli dei criteri di avvio delle attività necessari. Se tutti i controlli dei criteri vengono completati, l'operazione di aggiornamento viene ora eseguita come attività in background all'esterno dell'app in primo piano, consentendo all'app di essere sospesa in modo sicuro mentre l'operazione è in corso. Windows applica anche eventuali requisiti di runtime e annulla l'attività in background se tali requisiti non sono più soddisfatti.

  5. Infine, il SyncWithDeviceAsync metodo usa l'oggetto DeviceTriggerResults restituito da StartSyncBackgroundTaskAsync per determinare se l'attività in background è stata avviata correttamente. Un'istruzione switch viene usata per controllare il risultato da DeviceTriggerResults

  6. L'app in primo piano implementa un gestore eventi privato OnSyncWithDeviceProgress che aggiornerà l'interfaccia utente dell'app con lo stato di avanzamento dall'attività in background del dispositivo.

  7. L'app in primo piano implementa un gestore eventi privato OnSyncWithDeviceCompleted per gestire la transizione dalle attività in background all'app in primo piano al termine dell'attività in background.

    1. Usa il CheckResults metodo dell'oggetto BackgroundTaskCompletedEventArgs per determinare se sono state generate eccezioni dall'attività in background.

    2. L'app in primo piano riapre il dispositivo da usare dall'app ora che l'attività in background è stata completata e aggiorna l'interfaccia utente per notificare all'utente.

  8. L'app in primo piano implementa i gestori eventi clic sul pulsante privato dall'interfaccia utente per avviare e annullare l'attività in background.

    1. Il gestore eventi privato Sync_Click chiama il SyncWithDeviceAsync metodo descritto nei passaggi precedenti.

    2. Il gestore eventi privato CancelSync_Click chiama il metodo privato CancelSyncWithDevice per annullare l'attività in background.

  9. Il metodo privato CancelSyncWithDevice annulla la registrazione e annulla le sincronizzazioni dei dispositivi attivi in modo che il dispositivo possa essere riaperto usando il metodo BackgroundTaskRegistration.Unregister .

Esempio di dispositivo USB personalizzato

Sincronizzazione e aggiornamento dei dispositivi per le app per dispositivi UWP

Launching, resuming, and multitasking

Supporto dell'app con attività in background