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:

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

  2. A IoSyncBackgroundTask classe obtém a DeviceUseDetails instância passada para a classe no método Run da IoSyncBackgroundTask classe e usa essa instância para relatar o progresso de volta ao aplicativo da Microsoft Store e para 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 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:

  1. Cria novos objetos DeviceUseTrigger e BackgroundTaskRegistration.

  2. Verifica se alguma tarefa em segundo plano foi registrada anteriormente por este aplicativo e a 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 a tarefa DeviceUseTrigger e a salva para uso posterior.

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

    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 SyncWithDeviceAsync privado registra a tarefa em segundo plano que será sincronizada com o dispositivo e inicia a sincronização em segundo plano.

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

    2. 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étodo RequestAsync do objeto DeviceUseTrigger que começa a acionar 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 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.

  5. Finalmente, o método SyncWithDeviceAsync usa o objeto DeviceTriggerResults retornado de 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 OnSyncWithDeviceProgress privado 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 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.

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

  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 Sync_Click privado chama o método SyncWithDeviceAsync descrito nas etapas anteriores.

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

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

Exemplo de dispositivo USB personalizado

Sincronização e atualização de dispositivos para aplicativos de dispositivo UWP

Inicialização, continuação e multitarefa

Dar suporte ao seu aplicativo com tarefas em segundo plano