Criando uma tarefa em segundo plano do dispositivo no Windows 8.1 (aplicativos de dispositivo UWP)
No Windows 8.1, seu aplicativo UWP pode sincronizar dados no dispositivo periférico. Se seu aplicativo estiver associado a metadados do dispositivo, esse aplicativo de dispositivo UWP também poderá executar atualizações de dispositivo, como atualizações de firmware. Este tópico descreve como criar uma tarefa em segundo plano do dispositivo que usa o DeviceUseTrigger ou o DeviceServicingTrigger. Os agentes de segundo plano do dispositivo que usam esses gatilhos estão sujeitos a políticas que garantem o consentimento do usuário e ajudam a preservar a vida útil da bateria enquanto os dispositivos estão sendo sincronizados e atualizados. Para obter mais informações sobre tarefas em segundo plano do dispositivo, consulte Sincronização e atualização de dispositivos para aplicativos de dispositivo UWP.
Observação
Este tópico corresponde ao Exemplo de dispositivo USB personalizado. O exemplo de dispositivo USB personalizado demonstra uma tarefa em segundo plano que executa a sincronização de dispositivo com o DeviceUseTrigger.
Embora a tarefa em segundo plano do dispositivo no Exemplo de dispositivo USB personalizado apresente um DeviceUseTrigger, tudo o que foi discutido neste tópico também pode ser aplicado a tarefas em segundo plano do dispositivo que usam o DeviceServicingTrigger. A única diferença entre o uso dos dois gatilhos são as verificações de política feitas pelo Windows.
O manifesto do aplicativo
Para usar uma tarefa em segundo plano do dispositivo, seu aplicativo deve declará-la no arquivo de manifesto do aplicativo em primeiro plano, como é feito para tarefas em segundo plano acionadas pelo sistema. Para obter mais informações, consulte Sincronização e atualização de dispositivos para aplicativos de dispositivo UWP.
Neste exemplo de um arquivo de manifesto do pacote de aplicativos, DeviceLibrary.SyncContent é um ponto de entrada do aplicativo em primeiro plano. DeviceLibrary.SyncContent é o ponto de entrada para a tarefa em segundo plano que usa o DeviceUseTrigger.
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
<BackgroundTasks>
<m2:Task Type="deviceUse" />
</BackgroundTasks>
</Extension>
</Extensions>
A tarefa em segundo plano do dispositivo
A classe de tarefas em segundo plano do dispositivo implementa a IBackgroundTask
interface e contém o código real que você cria para sincronizar ou atualizar seu dispositivo periférico. A classe de tarefa em segundo plano é executada quando a tarefa em segundo plano é acionada e a partir do ponto de entrada fornecido no manifesto do aplicativo de seu aplicativo.
A classe de segundo plano do dispositivo no Exemplo de dispositivo USB personalizado contém o código para executar uma sincronização com um dispositivo USB usando a tarefa em segundo plano DeviceUseTrigger. Para obter detalhes completos, baixe o exemplo. Para obter mais informações sobre a implementação de IBackgroundTask
e a infraestrutura de tarefas em segundo plano do Windows, consulte Dar suporte ao aplicativo com tarefas em segundo plano.
As principais partes da tarefa em segundo plano do dispositivo no Exemplo de dispositivo USB personalizado incluem:
A classe
IoSyncBackgroundTask
implementa a interfaceIBackgroundTask
requerida pela infraestrutura de tarefas em segundo plano do Windows.A
IoSyncBackgroundTask
classe obtém aDeviceUseDetails
instância passada para a classe no método Run daIoSyncBackgroundTask
classe e usa essa instância para relatar o progresso de volta ao aplicativo da Microsoft Store e para registrar eventos de cancelamento.O método Run da classe
IoSyncBackgroundTask
também chama os métodos privadosOpenDevice
eWriteToDeviceAsync
que implementam o código de sincronização do dispositivo em segundo plano.
O aplicativo em primeiro plano
O aplicativo em primeiro plano no Exemplo de dispositivo USB personalizado registra e aciona uma tarefa em segundo plano do dispositivo que usa DeviceUseTrigger. Esta seção fornece uma visão geral das etapas que seu aplicativo em primeiro plano executará para registrar, acionar e controlar o progresso de uma tarefa em segundo plano do dispositivo.
O aplicativo em primeiro plano no Exemplo de dispositivo USB personalizado executa as seguintes etapas para usar uma tarefa em segundo plano do dispositivo:
Cria novos objetos DeviceUseTrigger e
BackgroundTaskRegistration
.Verifica se alguma tarefa em segundo plano foi registrada anteriormente por este aplicativo e a cancela chamando o método BackgroundTaskRegistration.Unregister na tarefa.
O método privado
SetupBackgroundTask
registra a tarefa em segundo plano que será sincronizada com o dispositivo. O métodoSetupBackgroundTask
é chamado a partir do métodoSyncWithDeviceAsync
na próxima etapa.Inicializa a tarefa
DeviceUseTrigger
e a salva para uso posterior.Cria um novo objeto
BackgroundTaskBuilder
e usa suas propriedadesName
,TaskEntryPoint
eSetTrigger
e o método para registrar o objetoDeviceUseTrigger
e o nome da tarefa em segundo plano do aplicativo. A propriedadeTaskEntryPoint
do objetoBackgroundTaskBuilder
é definida como o nome completo da classe de tarefa em segundo plano que será executada quando a tarefa em segundo plano for acionada.Registra eventos de conclusão e progresso da tarefa em segundo plano para que o aplicativo em primeiro plano possa fornecer atualizações de conclusão e progresso para o usuário.
O método
SyncWithDeviceAsync
privado registra a tarefa em segundo plano que será sincronizada com o dispositivo e inicia a sincronização em segundo plano.Chama o método
SetupBackgroundTask
da etapa anterior e registra a tarefa em segundo plano que será sincronizada com o dispositivo.Chama o método
StartSyncBackgroundTaskAsync
privado que inicia a tarefa em segundo plano. Esse método fecha o identificador do aplicativo para o dispositivo, a fim de assegurar que a tarefa em segundo plano seja capaz de abrir o dispositivo quando ele for iniciado.Importante
A tarefa em segundo plano precisará abrir o dispositivo para executar a atualização, portanto, o aplicativo em primeiro plano deve fechar suas conexões com o dispositivo antes de chamar
RequestAsync
.
Em seguida, o método
StartSyncBackgroundTaskAsync
chama o métodoRequestAsync
do objetoDeviceUseTrigger
que começa a acionar a tarefa em segundo plano e retorna o objetoDeviceTriggerResults
deRequestAsync
usado para determinar se a tarefa em segundo plano foi iniciada com êxito.Importante
O Windows confere se todas as verificações de política de iniciação de tarefas necessárias foram concluídas. Se todas as verificações de política forem concluídas, a operação de atualização agora será executada como uma tarefa em segundo plano fora do aplicativo em primeiro plano, permitindo que o aplicativo seja suspenso com segurança enquanto a operação estiver em andamento. O Windows também imporá requisitos de runtime e cancelará a tarefa em segundo plano se esses requisitos não forem mais atendidos.
Finalmente, o método
SyncWithDeviceAsync
usa o objetoDeviceTriggerResults
retornado deStartSyncBackgroundTaskAsync
para determinar se a tarefa em segundo plano foi iniciada com êxito. Uma instrução switch é usada para inspecionar o resultado deDeviceTriggerResults
.O aplicativo em primeiro plano implementa um manipulador de eventos
OnSyncWithDeviceProgress
privado que atualizará a interface do usuário do aplicativo com o progresso da tarefa em segundo plano do dispositivo.O aplicativo em primeiro plano implementa um manipulador de eventos
OnSyncWithDeviceCompleted
privado para controlar a transição de tarefas em segundo plano para o aplicativo em primeiro plano quando a tarefa em segundo plano for concluída.Usa o método
CheckResults
do objetoBackgroundTaskCompletedEventArgs
para determinar se alguma exceção foi lançada pela tarefa em segundo plano.O aplicativo em primeiro plano reabre o dispositivo para ser usado pelo aplicativo agora que a tarefa em segundo plano está concluída e atualiza a interface do usuário para notificar o usuário.
O aplicativo em primeiro plano implementa manipuladores de eventos de clique de botão privado da interface do usuário para iniciar e cancelar a tarefa em segundo plano.
O manipulador de eventos
Sync_Click
privado chama o métodoSyncWithDeviceAsync
descrito nas etapas anteriores.O manipulador de eventos
CancelSync_Click
chama o métodoCancelSyncWithDevice
para cancelar a tarefa em segundo plano.
O método
CancelSyncWithDevice
privado cancela o registro e cancela qualquer sincronização de dispositivo ativo para que o dispositivo possa ser reaberto usando-se o método BackgroundTaskRegistration.Unregister.
Tópicos relacionados
Exemplo de dispositivo USB personalizado
Sincronização e atualização de dispositivos para aplicativos de dispositivo UWP