Condividi tramite


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

DeviceUseTrigger permette alla tua app universale di Windows di accedere a sensori e periferiche 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 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, vedi l'esempio di sensori in background.

Importante

DeviceUseTrigger non può essere usato con le attività in background in-process. Le informazioni contenute in questo argomento si applicano solo alle attività in background in esecuzione 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 Supportare 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 e sono consentiti al massimo 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 DeviceUseTrigger. ali operazioni possono essere eseguite solo sul PC e solo da un'app con privilegi che usa 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 maggiori informazioni, vedere Sincronizzazione e aggiornamento dei dispositivi per le app di Microsoft Store.

Protocolli/API supportate in un'attività in background DeviceUseTrigger

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. Gli elementi seguenti sono supportati in un'app di Windows universale.

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

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

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 usare un'attività in background DeviceUseTrigger, l'app deve dichiararla nel file manifesto dell'app di un'app in primo piano, come avviene per le attività in background attivate dal sistema.

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

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

Introduzione all'uso di DeviceUseTrigger

Per usare DeviceUseTrigger, seguire questa procedura di base. Per altre informazioni sulle attività in background, vedi Supportare l'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 verrà eseguita con priorità ridotta per mantenere reattive le app in primo piano.
  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 lo stato o il completamento, l'app riceverà questi eventi tramite lo stato di avanzamento e gli eventi completati nell'attività registrata.

Importante Considerare questi punti importanti quando si usa DeviceUseTrigger:

  • La possibilità di attivare attività in background a livello di codice che usano DeviceUseTrigger è stata introdotta per la prima volta in Windows 8.1 e Windows Telefono 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 reale). È importante considerare questi requisiti dei criteri quando si usano queste attività in background per interagire con il dispositivo periferico.

Suggerimento Per vedere come funzionano queste attività in background, scaricare 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, vedi l'esempio di sensori in background.  

Restrizioni relative alla frequenza e al primo piano

Non esiste alcuna restrizione sulla frequenza con cui l'app può avviare 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) e 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 una seconda attività in background DeviceUseTrigger prima del completamento della prima attività in background.

Restrizioni del dispositivo

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

Da una singola 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.

Criteri 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 dei criteri quando si usa questo tipo di attività in background per interagire con dispositivi o sensori.

Criteri di avvio delle attività

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

Criteri DeviceUseTrigger in un'app di Windows universale
L'app è in primo piano quando si attiva l'attività in background. si applicano i criteri
Il dispositivo è collegato al sistema (o nell'intervallo per un dispositivo wireless). si applicano i criteri
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. si applicano i criteri
Il punto di ingresso dell'attività in background fornito dall'app viene registrato nel manifesto del pacchetto dell'app. si applicano i criteri
È in esecuzione una sola attività in background DeviceUseTrigger per ogni app. si applicano i criteri
Il numero massimo di attività in background DeviceUseTrigger 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 o sensori periferici a cui l'app può accedere da una singola attività in background DeviceUseTrigger quando si usano 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 oppure ogni 5 minuti quando lo schermo non è bloccato. Il mancato rispetto di questo criterio può comportare l'annullamento dell'attività. si applicano i criteri

Controlli dei criteri di runtime

Windows applica i requisiti dei criteri di runtime seguenti mentre l'attività è in esecuzione in background. Se uno dei requisiti di runtime smette di essere true, Windows annulla l'attività in background del dispositivo.

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

Verifica dei criteri DeviceUseTrigger in un'app di Windows universale
Il dispositivo è collegato al sistema (o nell'intervallo per un dispositivo wireless). si applica il controllo dei criteri
L'attività esegue normali operazioni di I/O sul dispositivo (1 I/O ogni 5 secondi). si applica il controllo dei criteri
L'app non ha annullato l'attività. si applica il controllo dei criteri
Limite di tempo in tempo reale: la quantità totale di tempo per l'esecuzione dell'attività dell'app 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. si applica il controllo dei criteri

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'uso dell'attività in background DeviceUseTrigger dall'app 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. Connetti i gestori di eventi di avanzamento e completamento al tuo 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. Chiudere qualsiasi oggetto dispositivo o sensore aperto quando si attiva l'attività in background DeviceUseTrigger in modo che tali dispositivi o sensori siano liberi di essere aperti e usati dall'attività in background.

  5. Registrare il trigger.

  6. Considerare attentamente l'impatto della batteria sull'accesso a un dispositivo o sensore da un'attività in background. Ad esempio, l'esecuzione troppo frequente dell'intervallo di report di un sensore potrebbe causare l'esecuzione dell'attività in modo che esaurisca rapidamente la batteria di un telefono.

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

  8. Eseguire la registrazione per gli eventi di annullamento dalla classe dell'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 alla 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 a memoria ridotta, questo consentirà ad altre app di usare un'attività in background DeviceUseTrigger .

    • 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. L'annullamento della registrazione e l'annullamento dell'attività in background consentirà al codice di annullamento di arrestare correttamente le attività in background.

Annullamento di un'attività in background

Per annullare un'attività in esecuzione in background dall'app in primo piano, usa il metodo Annulla registrazione nell'oggetto BackgroundTaskRegistration usato nell'app per registrare l'attività in background DeviceUseTrigger. L'annullamento della registrazione dell'attività in background tramite il metodo Annulla registrazione in BackgroundTaskRegistration causerà l'annullamento dell'attività in background da parte dell'infrastruttura delle attività in background.

Il metodo Annulla registrazione accetta inoltre un valore booleano true o false per indicare se le istanze attualmente in esecuzione dell'attività in background devono essere annullate senza consentirne il completamento. Per altre info, vedere le informazioni di riferimento sull'API per annullare la registrazione.

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