Compartilhar via


Criando uma tarefa em segundo plano do dispositivo no Windows 8.1 (aplicativos de dispositivo UWP)

Importante

Os metadados do dispositivo foram preteridos e serão removidos numa versão futura do Windows. Para obter informações sobre a substituição dessa funcionalidade, consulte Metadados de Contêiner do Pacote de Driver.

Seu aplicativo UWP pode sincronizar dados em seu dispositivo periférico. Se o aplicativo estiver associado aos metadados do dispositivo, esse aplicativo de dispositivo UWP também poderá executar atualizações de dispositivo, como atualizações de firmware. Este artigo descreve como criar uma tarefa em segundo plano do dispositivo que usa o DeviceUseTrigger ou DeviceServicingTrigger. Os agentes em 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 de dispositivos e atualização para aplicativos de dispositivo UWP.

Este artigo corresponde ao exemplo de dispositivo USB personalizado. O exemplo de dispositivo USB personalizado demonstra uma tarefa em segundo plano que executa a sincronização do dispositivo com o DeviceUseTrigger.

Embora a tarefa em segundo plano do dispositivo no exemplo de dispositivo USB personalizado tenha um DeviceUseTrigger, tudo discutido neste artigo também pode ser aplicado a tarefas em segundo plano do dispositivo que usam DeviceServicingTrigger. A única diferença entre usar os dois gatilhos são as verificações de política feitas pelo Windows.

O manifesto do aplicativo

Para usar uma tarefa em segundo plano, seu aplicativo deve declará-la no arquivo de manifesto do seu aplicativo em primeiro plano, como é feito para tarefas em segundo plano ativadas pelo sistema. Para obter mais informações, consulte Sincronização de dispositivos e atualização 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 tarefa 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 plano de fundo 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 IBackgroundTask e a infraestrutura de tarefas em segundo plano do Windows, consulte 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:

  1. A IoSyncBackgroundTask classe implementa a IBackgroundTask interface exigida pela infraestrutura de tarefa em segundo plano do Windows.

  2. A classe IoSyncBackgroundTask obtém a instância DeviceUseDetails passada ao método Run da classe IoSyncBackgroundTask e usa essa instância para relatar o progresso ao aplicativo da Microsoft Store e registrar eventos de cancelamento.

  3. O método Run da classe IoSyncBackgroundTask também chama os métodos privados OpenDevice e WriteToDeviceAsync 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 dispara 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, disparar e lidar com 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:

  1. Cria um novo DeviceUseTrigger e um novo BackgroundTaskRegistration objeto.

  2. Verifica se alguma tarefa em segundo plano foi registrada anteriormente por este aplicativo e as cancela chamando o método BackgroundTaskRegistration.Unregister na tarefa.

  3. O método privado SetupBackgroundTask registra a tarefa em segundo plano que será sincronizada com o dispositivo. O método SetupBackgroundTask é chamado a partir do método SyncWithDeviceAsync na próxima etapa.

    1. Inicializa o DeviceUseTrigger e salva para uso posterior.

    2. Cria um novo objeto BackgroundTaskBuilder e usa suas propriedades Name, TaskEntryPoint e o método SetTrigger para registrar o objeto do aplicativo DeviceUseTrigger e o nome da tarefa em segundo plano. A BackgroundTaskBuilder propriedade do TaskEntryPoint objeto é definida como o nome completo da classe de tarefa em segundo plano que será executada quando a tarefa em segundo plano for disparada.

    3. 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.

  4. O método privado SyncWithDeviceAsync registra a tarefa em segundo plano que será sincronizada com o dispositivo e inicia a sincronização em segundo plano.

    1. Chama o SetupBackgroundTask método da etapa anterior e registra a tarefa em segundo plano que será sincronizada com o dispositivo.

    2. Chama o método privado StartSyncBackgroundTaskAsync 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, de modo que 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étodo RequestAsync do objeto DeviceUseTrigger, que dispara a tarefa em segundo plano e retorna o objeto DeviceTriggerResults de RequestAsync, usado para determinar se a tarefa em segundo plano foi iniciada com êxito.

    Importante

    O Windows verifica se todas as verificações de política de iniciação de tarefa necessárias foram concluídas. Se todas as verificações de política forem concluídas, a operação de atualização agora está em execução 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 está em andamento. O Windows também imporá todos os requisitos de runtime e cancelará a tarefa em segundo plano se esses requisitos não forem mais atendidos.

  5. Por fim, o método SyncWithDeviceAsync usa o objeto DeviceTriggerResults retornado por StartSyncBackgroundTaskAsync para determinar se a tarefa em segundo plano foi iniciada com êxito. Uma instrução switch é usada para inspecionar o resultado de DeviceTriggerResults.

  6. O aplicativo em primeiro plano implementa um manipulador de eventos privado OnSyncWithDeviceProgress que atualizará a interface do usuário do aplicativo com o progresso da tarefa em segundo plano do dispositivo.

  7. O aplicativo em primeiro plano implementa um manipulador de eventos privado OnSyncWithDeviceCompleted para lidar com a transição de tarefas em segundo plano para um aplicativo em primeiro plano quando a tarefa em segundo plano for concluída.

    1. Usa o método CheckResults do objeto BackgroundTaskCompletedEventArgs para determinar se alguma exceção foi lançada pela tarefa em segundo plano.

    2. O aplicativo em primeiro plano reabre o dispositivo para uso pelo aplicativo agora que a tarefa em segundo plano está concluída e atualiza a interface do usuário para notificar o usuário.

  8. 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.

    1. O manipulador de eventos privado Sync_Click chama o SyncWithDeviceAsync método descrito nas etapas anteriores.

    2. O manipulador de eventos privados CancelSync_Click chama o método privado CancelSyncWithDevice para cancelar a tarefa em segundo plano.

  9. O método privado CancelSyncWithDevice cancela o registro e cancela qualquer sincronização de dispositivo ativo para que o dispositivo possa ser reaberto usando o método BackgroundTaskRegistration.Unregister .