Condividi tramite


Accedere a sensori e dispositivi da un’attività in background

DeviceUseTrigger consente all'app di Windows universale di accedere ai sensori e ai dispositivi periferici in background, anche quando l'app in primo piano è sospesa. Ad esempio, a seconda della posizione in cui è in esecuzione l'app, può usare un'attività in background per sincronizzare i dati con i dispositivi o monitorare i sensori. Per mantenere la durata della batteria e garantire il consenso dell'utente appropriato, l'uso di DeviceUseTrigger è soggetto a criteri descritti in questo argomento.

Per accedere ai sensori o ai dispositivi periferici in background, creare un'attività in background che usa il DeviceUseTrigger. Per un esempio che mostra come questa operazione viene eseguita in un PC, vedi l'esempio di dispositivo USB personalizzato. Per un esempio su un telefono, vedere il campione sensori in background .

Importante

DeviceUseTrigger non può essere utilizzato con le attività in background che operano nel processo. Le informazioni contenute in questo argomento si applicano solo alle attività in background che vengono eseguite out-of-process.

Panoramica delle attività in background del dispositivo

Quando l'app non è più visibile all'utente, Windows sospende o termina l'app per recuperare la memoria e le risorse della CPU. Ciò consente l'esecuzione in primo piano di altre app e riduce il consumo di batteria. In questo caso, senza l'aiuto di un'attività in background, gli eventi di dati in corso andranno persi. Windows fornisce il trigger dell'attività in background, DeviceUseTrigger, per consentire all'app di eseguire operazioni di sincronizzazione e monitoraggio a esecuzione prolungata su dispositivi e sensori in modo sicuro in background, anche se l'app è sospesa. Per altre info sul ciclo di vita delle app, vedi Avvio, ripresa e attività in background. Per altre informazioni sulle attività in background, vedi Supporta l'app con le attività in background.

Nota In un'app di Windows universale, la sincronizzazione di un dispositivo in background richiede che l'utente abbia approvato la sincronizzazione in background da parte dell'app. Il dispositivo deve anche essere connesso o associato al PC, con I/O attivo ed è consentito un massimo di 10 minuti di attività in background. Altri dettagli sull'applicazione dei criteri sono descritti più avanti in questo argomento.

Limitazione: operazioni critiche del dispositivo

Alcune operazioni critiche del dispositivo, ad esempio gli aggiornamenti del firmware a esecuzione prolungata, non possono essere eseguite con il DeviceUseTrigger. Tali operazioni possono essere eseguite solo sul PC e solo da un'applicazione privilegiata che usa il DeviceServicingTrigger. Un'app con privilegi è un'app autorizzata dal produttore del dispositivo a eseguire tali operazioni. I metadati del dispositivo vengono usati per specificare quale app, se presente, è stata designata come app con privilegi per un dispositivo. Per ulteriori informazioni, vedi Sincronizzazione e aggiornamento dei dispositivi per le app per dispositivi di Microsoft Store.

Protocolli/API supportati in un'attività in background di attivazione dispositivo

Le attività in background che usano DeviceUseTrigger consentono all'app di comunicare su molti protocolli/API, la maggior parte delle quali non sono supportate dalle attività in background attivate dal sistema. Sono supportati i seguenti elementi in un'app Universale di Windows.

Protocollo DeviceUseTrigger in un'app universale di Windows
USB questo protocollo è supportato.
NASCOSTO questo protocollo è supportato.
Bluetooth RFCOMM questo protocollo è supportato.
Bluetooth GATT questo protocollo è supportato.
MTP questo protocollo è supportato.
Rete cablata questo protocollo è supportato.
Rete Wi-Fi questo protocollo è supportato.
IDeviceIOControl deviceservicingtrigger supporta ideviceiocontrol
API dei sensori deviceservicingtrigger supporta le API dei sensori universali (limitate ai sensori nella famiglia di dispositivi universali )

Registrazione delle attività in background nel manifesto del pacchetto dell'applicazione

L'app eseguirà operazioni di sincronizzazione e aggiornamento nel codice che viene eseguito come parte di un'attività in background. Questo codice è incorporato in una classe Windows Runtime che implementa IBackgroundTask (o in una pagina JavaScript dedicata per le app JavaScript). Per utilizzare un'attività in background DeviceUseTrigger, l'app deve dichiararla nel file manifesto di un'applicazione in primo piano, come fa per le attività in background attivate dal sistema.

In questo esempio di file manifesto del pacchetto dell'applicazione, DeviceLibrary.SyncContent è il punto di ingresso per un'attività in background che utilizza il DeviceUseTrigger.

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

Introduzione all'uso di DeviceUseTrigger

Per usare il DeviceUseTrigger, seguire questa procedura di base. Per altre informazioni sulle attività in background, vedi Sostieni la tua app con le attività in background.

  1. L'app registra l'attività in background nel manifesto dell'app e incorpora il codice dell'attività in background in una classe Windows Runtime che implementa IBackgroundTask o in una pagina JavaScript dedicata per le app JavaScript.
  2. All'avvio dell'app, creerà e configurerà un oggetto trigger di tipo DeviceUseTrigger e archivierà l'istanza del trigger per un uso futuro.
  3. L'app controlla se l'attività in background è stata registrata in precedenza e, in caso contrario, la registra sul trigger. Tieni presente che l'app non è autorizzata a impostare condizioni per l'attività associata a questo trigger.
  4. Quando l'app deve attivare l'attività in background, deve prima chiamare RequestAccessAsync per verificare se l'app è in grado di richiedere un'attività in background.
  5. Se l'app può richiedere l'attività in background, chiama il metodo di attivazione RequestAsync nell'oggetto trigger del dispositivo.
  6. L'attività in background non è limitata come altre attività in background del sistema (non esiste alcuna quota di tempo CPU), ma funzionerà con bassa priorità per garantire che le app in primo piano rimangano reattive.
  7. Windows convaliderà quindi, in base al tipo di trigger, che i criteri necessari sono stati soddisfatti, inclusa la richiesta del consenso dell'utente per l'operazione prima di avviare l'attività in background.
  8. Windows monitora le condizioni di sistema e il runtime delle attività e, se necessario, annulla l'attività se le condizioni richieste non vengono più soddisfatte.
  9. Quando le attività in background segnalano l'avanzamento o il completamento, l'applicazione riceverà questi eventi tramite gli eventi di avanzamento e di completamento dell'attività registrata.

Importante Considerare questi punti importanti quando si usa il DeviceUseTrigger:

  • La possibilità di attivare programmaticamente attività in background che usano il DeviceUseTrigger è stata introdotta per la prima volta in Windows 8.1 e Windows Phone 8.1.

  • Alcuni criteri vengono applicati da Windows per garantire il consenso dell'utente durante l'aggiornamento dei dispositivi periferici nel PC.

  • I criteri aggiuntivi vengono applicati per mantenere la durata della batteria dell'utente durante la sincronizzazione e l'aggiornamento dei dispositivi periferici.

  • Le attività in background che usano DeviceUseTrigger potrebbero essere annullate da Windows quando determinati requisiti dei criteri non vengono più soddisfatti, inclusa una quantità massima di tempo in background (tempo di clock wall). È importante considerare questi requisiti delle politiche quando si usano attività in background per interagire con i dispositivi periferici.

Suggerimento Per vedere come funzionano queste attività in background, scarica un esempio. Per un esempio che mostra come questa operazione viene eseguita in un PC, vedi l'esempio di dispositivo USB personalizzato. Per un esempio su un telefono, vedere il campione sensori in background .  

Restrizioni relative alla frequenza e al primo piano

Non esiste alcuna restrizione sulla frequenza con cui l'app può avviare le operazioni, ma l'app può eseguire una sola operazione dell'attività in background DeviceUseTrigger alla volta (questo non influisce su altri tipi di attività in background) ed può avviare un'attività in background solo mentre l'app è in primo piano. Quando l'app non è in primo piano, non è possibile avviare un'attività in background con DeviceUseTrigger. L'app non può avviare un secondo DeviceUseTrigger compito in background prima che il primo compito in background sia stato completato.

Restrizioni di dispositivo

Anche se ogni app è limitata alla registrazione e all'esecuzione di una singola DeviceUseTrigger attività in background, il dispositivo sul quale è in esecuzione l'app può consentire a più app di registrare ed eseguire DeviceUseTrigger attività in background. A seconda del dispositivo, potrebbe essere previsto un limite al numero totale di DeviceUseTrigger attività in background di tutte le app. Ciò consente di mantenere la batteria nei dispositivi con vincoli di risorse. Per altri dettagli, vedere la tabella seguente.

Da un'unica attività in background DeviceUseTrigger, l'app può accedere a un numero illimitato di dispositivi o sensori periferici, limitato solo dalle API e dai protocolli supportati elencati nella tabella precedente.

Politiche delle attività in background

Windows applica i criteri quando l'app usa un'attività in background DeviceUseTrigger. Se questi criteri non vengono soddisfatti, l'attività in background potrebbe essere annullata. È importante considerare questi requisiti di policy quando si usa questo tipo di attività in background per interagire con i dispositivi o i sensori.

Criteri di avvio delle attività

Questa tabella indica quali criteri di avvio delle attività si applicano a un'app di Windows universale.

Politica DeviceUseTrigger in un'app universale di Windows
L'app è in primo piano quando si attiva l'attività in background. politica si applica
Il dispositivo è collegato al sistema (o nel raggio d'azione per un dispositivo wireless). politica si applica
Il dispositivo è accessibile all'app usando le API periferiche del dispositivo supportate (le API di Windows Runtime per USB, HID, Bluetooth, Sensori e così via). Se l'app non riesce ad accedere al dispositivo o al sensore, l'accesso all'attività in background viene negato. politica si applica
Il punto di ingresso dell'attività in background fornito dall'app viene registrato nel manifesto del pacchetto dell'app. politica si applica
Solo un'attività in background DeviceUseTrigger viene eseguita per ogni app. politica si applica
Il numero massimo di DeviceUseTrigger attività in background non è ancora stato raggiunto nel dispositivo (in cui è in esecuzione l'app). Famiglia di dispositivi desktop: un numero illimitato di attività può essere registrato ed eseguito in parallelo. Famiglia di dispositivi mobili: 1 attività su un dispositivo da 512 MB; in caso contrario, 2 attività possono essere registrate ed eseguite in parallelo.
Numero massimo di dispositivi periferici o sensori ai quali l'app può accedere tramite un'unica attività in background DeviceUseTrigger quando vengono utilizzati le API/protocolli supportati. Illimitati
L'attività in background utilizza 400 ms di tempo cpu (presupponendo una CPU a 1GHz) ogni minuto quando lo schermo è bloccato o ogni 5 minuti quando lo schermo non è bloccato. Il mancato rispetto di questo criterio può comportare l'annullamento dell'attività. politica si applica

Controlli delle policy di runtime

Windows applica i seguenti requisiti delle politiche runtime mentre il tuo compito è in esecuzione in background. Se uno dei requisiti di runtime smette di essere valido, Windows annullerà l'attività in background del dispositivo.

Questa tabella indica quali criteri di runtime si applicano a un'app di Windows universale.

Controllo dei criteri DeviceUseTrigger in un'app universale di Windows
Il dispositivo è collegato al sistema (o nel raggio d'azione per un dispositivo wireless). verifica della politica si applica
L'attività esegue normali operazioni di I/O sul dispositivo (1 I/O ogni 5 secondi). verifica della politica si applica
L'app non ha annullato l'attività. verifica della politica si applica
Limite di tempo di orologio: il tempo totale che il compito della tua app può rimanere in esecuzione in background. Famiglia di dispositivi desktop: 10 minuti. Famiglia di dispositivi mobili: nessun limite di tempo. Per risparmiare risorse, non è possibile eseguire più di 1 o 2 attività contemporaneamente.
L'app non è stata chiusa. verifica della politica si applica

Procedure consigliate

Di seguito sono riportate le procedure consigliate per le app che usano le attività in background DeviceUseTrigger .

Programmazione di un'attività in background

L'utilizzo dell'attività in background DeviceUseTrigger garantisce che tutte le operazioni di sincronizzazione o monitoraggio avviate dall'app in primo piano continuino a essere eseguite in background se gli utenti cambiano app e l'app in primo piano viene sospesa da Windows. È consigliabile seguire questo modello complessivo per la registrazione, l'attivazione e l'annullamento della registrazione delle attività in background:

  1. Chiamare RequestAccessAsync per verificare se l'app è in grado di richiedere un'attività in background. Questa operazione deve essere eseguita prima di registrare un'attività in background.

  2. Registrare l'attività in background prima di richiedere il trigger.

  3. Collega i tuoi gestori eventi di avanzamento e completamento al trigger. Quando l'app torna dalla sospensione, Windows fornirà all'app tutti gli eventi di avanzamento o completamento in coda che possono essere usati per determinare lo stato delle attività in background.

  4. Chiudi tutti gli oggetti di dispositivo o sensore aperti quando attivi il trigger DeviceUseTrigger per l'attività in background, in modo che tali dispositivi o sensori siano liberi di essere aperti e utilizzati dall'attività in background.

  5. Registrare il trigger.

  6. Considerare attentamente l'impatto sulla batteria quando si accede a un dispositivo o sensore da un'attività in background. Ad esempio, impostare un sensore con un intervallo di segnalazione troppo frequente potrebbe far sì che il compito si esegua così spesso da esaurire rapidamente la batteria di un telefono.

  7. Al termine dell'attività in background, annullare la registrazione.

  8. Registra gli eventi di annullamento dalla tua classe di attività in background. La registrazione per gli eventi di annullamento consentirà al codice dell'attività in background di arrestare in modo pulito l'attività in background in esecuzione quando viene annullata da Windows o dall'app in primo piano.

  9. All'uscita dell'app (non sospensione), annullare la registrazione e annullare eventuali attività in esecuzione se l'app non ne ha più bisogno. Nei sistemi con vincoli di risorse, ad esempio telefoni con poca memoria, questo consentirà ad altre app di usare un DeviceUseTrigger attività in background.

    • Quando l'app viene chiusa, annullare la registrazione e annullare le attività in esecuzione.

    • Quando l'app viene chiusa, le attività in background verranno annullate e tutti i gestori eventi esistenti verranno disconnessi dalle attività in background esistenti. Ciò impedisce di determinare lo stato delle attività in background. La cancellazione della registrazione e l'annullamento dell'attività in background consentiranno al codice di annullamento di terminare in modo corretto le attività in background.

Annullamento di un'attività in background

Per annullare un'attività in background in esecuzione dall'app in primo piano, usa il metodo Unregister sull'oggetto BackgroundTaskRegistration, che utilizzi nell'app per registrare l'attività in background DeviceUseTrigger. Annullando la registrazione dell'attività in background utilizzando il metodo Annulla registrazione su BackgroundTaskRegistration, l'infrastruttura delle attività in background annullerà l'attività in background.

Il metodo Deregistra accetta inoltre un valore booleano di true o false per indicare se le istanze attualmente in esecuzione dell'attività in background devono essere annullate senza permetterne il completamento. Per ulteriori informazioni, consultare la documentazione API per Disiscrizione.

Oltre a Annullare la registrazione, l'app dovrà chiamare anche BackgroundTaskDeferral.Complete. In questo modo il sistema informa che l'operazione asincrona associata a un'attività in background è stata completata.