Compartilhar via


Acessar sensores e dispositivos a partir de uma tarefa em segundo plano

DeviceUseTrigger permite que seu aplicativo Universal do Windows acesse sensores e dispositivos periféricos em segundo plano, mesmo quando seu aplicativo em primeiro plano estiver suspenso. Por exemplo, dependendo de onde seu aplicativo está sendo executado, ele pode usar uma tarefa em segundo plano para sincronizar dados com dispositivos ou monitorar sensores. Para ajudar a preservar a vida útil da bateria e garantir o consentimento apropriado do usuário, o uso de DeviceUseTrigger está sujeito às políticas descritas neste tópico.

Para acessar sensores ou dispositivos periféricos em segundo plano, crie uma tarefa em segundo plano que use o DeviceUseTrigger. Para obter um exemplo que mostra como isso é feito em um computador, consulte o exemplo de dispositivo USB personalizado. Para obter um exemplo em um telefone, consulte o exemplo de sensores em segundo plano.

Importante

DeviceUseTrigger não pode ser usado com tarefas em segundo plano em processo. As informações neste tópico só se aplicam a tarefas em segundo plano que são executadas fora do processo.

Visão geral da tarefa em segundo plano do dispositivo

Quando seu aplicativo não estiver mais visível para o usuário, o Windows suspenderá ou encerrará seu aplicativo para recuperar recursos de memória e CPU. Isso permite que outros aplicativos sejam executados em primeiro plano e reduz o consumo de bateria. Quando isso acontece, sem a ajuda de uma tarefa em segundo plano, todos os eventos de dados em andamento serão perdidos. O Windows fornece o gatilho de tarefa em segundo plano, DeviceUseTrigger, para permitir que seu aplicativo execute operações de sincronização e monitoramento de longa execução em dispositivos e sensores com segurança em segundo plano, mesmo que seu aplicativo esteja suspenso. Para obter mais informações sobre o ciclo de vida do aplicativo, consulte Iniciando, retomando e tarefas em segundo plano. Para obter mais informações sobre tarefas em segundo plano, consulte Dar suporte ao seu aplicativo com tarefas em segundo plano.

Observação Em um aplicativo Universal do Windows, a sincronização de um dispositivo em segundo plano requer que o usuário tenha aprovado a sincronização em segundo plano pelo seu aplicativo. O dispositivo também deve estar conectado ou emparelhado com o PC, com E/S ativa, e tem no máximo 10 minutos de atividade em segundo plano. Mais detalhes sobre a aplicação de políticas são descritos posteriormente neste tópico.

Limitação: operações críticas do dispositivo

Algumas operações críticas do dispositivo, como atualizações de firmware de longa execução, não podem ser executadas com o DeviceUseTrigger. Essas operações podem ser executadas somente no computador e somente por um aplicativo privilegiado que usa o DeviceServicingTrigger. Um aplicativo privilegiado é um aplicativo que o fabricante do dispositivo autorizou para executar essas operações. Os metadados do dispositivo são usados para especificar qual aplicativo, se houver, foi designado como o aplicativo privilegiado para um dispositivo. Para obter mais informações, consulte Sincronização e atualização de dispositivos para aplicativos de dispositivo da Microsoft Store.

Protocolos/APIs com suporte em uma tarefa em segundo plano DeviceUseTrigger

As tarefas em segundo plano que usam DeviceUseTrigger permitem que seu aplicativo se comunique por meio de vários protocolos/APIs, a maioria dos quais não tem suporte em tarefas em segundo plano disparadas pelo sistema. Os itens a seguir têm suporte em um aplicativo Universal do Windows.

Protocolo DeviceUseTrigger em um aplicativo Universal do Windows
USB Este protocolo é suportado.
HID Este protocolo é suportado.
Bluetooth RFCOMM Este protocolo é suportado.
Bluetooth GATT Este protocolo é suportado.
MTP Este protocolo é suportado.
Rede com fio Este protocolo é suportado.
Rede Wi-Fi Este protocolo é suportado.
IDeviceIOControl DeviceServicingTrigger dá suporte a iDeviceIOCreport
API de sensores DeviceServicingTrigger dá suporte a APIs de sensores universais (limitado a sensores da família de dispositivos universais)

Registrando tarefas em segundo plano no manifesto do pacote de aplicativos

Seu aplicativo executará operações de sincronização e atualização no código executado como parte de uma tarefa em segundo plano. Esse código é inserido em uma classe do Tempo de Execução do Windows que implementa IBackgroundTask (ou em uma página JavaScript dedicada para aplicativos JavaScript). Para usar uma tarefa em segundo plano DeviceUseTrigger , seu aplicativo deve declará-la no arquivo de manifesto do aplicativo de um aplicativo em primeiro plano, como faz para tarefas em segundo plano disparadas pelo sistema.

Neste exemplo de um arquivo de manifesto do pacote do aplicativo, DeviceLibrary.SyncContent é o ponto de entrada para uma tarefa em segundo plano que usa o DeviceUseTrigger.

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

Introdução ao uso de DeviceUseTrigger

Para usar o DeviceUseTrigger, siga estas etapas básicas. Para obter mais informações sobre tarefas em segundo plano, consulte Dar suporte ao seu aplicativo com tarefas em segundo plano.

  1. Seu aplicativo registra sua tarefa em segundo plano no manifesto do aplicativo e incorpora o código da tarefa em segundo plano em uma classe do Windows Runtime que implementa IBackgroundTask ou em uma página JavaScript dedicada para aplicativos JavaScript.
  2. Quando seu aplicativo for iniciado, ele criará e configurará um objeto de gatilho do tipo DeviceUseTrigger e armazenará a instância de gatilho para uso futuro.
  3. Seu aplicativo verifica se a tarefa em segundo plano foi registrada anteriormente e, caso contrário, registra-a no gatilho. Observe que seu aplicativo não tem permissão para definir condições na tarefa associada a esse gatilho.
  4. Quando seu aplicativo precisa disparar a tarefa em segundo plano, ele deve primeiro chamar RequestAccessAsync para verificar se o aplicativo é capaz de solicitar uma tarefa em segundo plano.
  5. Se o aplicativo puder solicitar a tarefa em segundo plano, ele chamará o método de ativação RequestAsync no objeto de gatilho do dispositivo.
  6. Sua tarefa em segundo plano não é limitada como outras tarefas em segundo plano do sistema (não há cota de tempo de CPU), mas será executada com prioridade reduzida para manter os aplicativos em primeiro plano responsivos.
  7. Em seguida, o Windows validará, com base no tipo de gatilho, que as políticas necessárias foram atendidas, incluindo a solicitação de consentimento do usuário para a operação antes de iniciar a tarefa em segundo plano.
  8. O Windows monitora as condições do sistema e o tempo de execução da tarefa e, se necessário, cancelará a tarefa se as condições necessárias não forem mais atendidas.
  9. Quando as tarefas em segundo plano relatarem o progresso ou a conclusão, o aplicativo receberá esses eventos por meio de eventos de progresso e concluídos na tarefa registrada.

Importante Considere estes pontos importantes ao usar o DeviceUseTrigger:

  • A capacidade de disparar programaticamente tarefas em segundo plano que usam o DeviceUseTrigger foi introduzida pela primeira vez no Windows 8.1 e no Windows Phone 8.1.

  • Determinadas políticas são impostas pelo Windows para garantir o consentimento do usuário ao atualizar dispositivos periféricos no computador.

  • Políticas adicionais são aplicadas para preservar a vida útil da bateria do usuário ao sincronizar e atualizar dispositivos periféricos.

  • As tarefas em segundo plano que usam DeviceUseTrigger podem ser canceladas pelo Windows quando determinados requisitos de política não forem mais atendidos, incluindo uma quantidade máxima de tempo em segundo plano (tempo do relógio de parede). É importante considerar esses requisitos de política ao usar essas tarefas em segundo plano para interagir com seu dispositivo periférico.

Dica Para ver como essas tarefas em segundo plano funcionam, baixe um exemplo. Para obter um exemplo que mostra como isso é feito em um computador, consulte o exemplo de dispositivo USB personalizado. Para obter um exemplo em um telefone, consulte o exemplo de sensores em segundo plano.  

Restrições de frequência e primeiro plano

Não há restrição quanto à frequência com que seu aplicativo pode iniciar operações, mas seu aplicativo pode executar apenas uma operação de tarefa em segundo plano DeviceUseTrigger por vez (isso não afeta outros tipos de tarefas em segundo plano) e pode iniciar uma tarefa em segundo plano somente enquanto seu aplicativo está em primeiro plano. Quando seu aplicativo não está em primeiro plano, ele não pode iniciar uma tarefa em segundo plano com DeviceUseTrigger. Seu aplicativo não pode iniciar uma segunda tarefa em segundo plano DeviceUseTrigger antes que a primeira tarefa em segundo plano seja concluída.

Restrições do dispositivo

Embora cada aplicativo esteja limitado a registrar e executar apenas uma tarefa em segundo plano DeviceUseTrigger, o dispositivo (no qual seu aplicativo está sendo executado) pode permitir que vários aplicativos registrem e executem tarefas em segundo plano DeviceUseTrigger. Dependendo do dispositivo, pode haver um limite no número total de tarefas em segundo plano DeviceUseTrigger de todos os aplicativos. Isso ajuda a preservar a bateria em dispositivos com recursos limitados. Consulte a tabela a seguir para obter mais detalhes.

A partir de uma única tarefa em segundo plano DeviceUseTrigger , seu aplicativo pode acessar um número ilimitado de dispositivos periféricos ou sensores, limitados apenas pelas APIs e protocolos com suporte listados na tabela anterior.

Políticas de tarefas em segundo plano

O Windows impõe políticas quando seu aplicativo usa uma tarefa em segundo plano DeviceUseTrigger. Se essas políticas não forem atendidas, a tarefa em segundo plano poderá ser cancelada. É importante considerar esses requisitos de política ao usar esse tipo de tarefa em segundo plano para interagir com dispositivos ou sensores.

Políticas de iniciação de tarefas

Esta tabela indica quais políticas de iniciação de tarefa se aplicam a um aplicativo Universal do Windows.

Policy DeviceUseTrigger em um aplicativo Universal do Windows
Seu aplicativo está em primeiro plano ao disparar a tarefa em segundo plano. Aplica-se a política
O dispositivo está conectado ao sistema (ou dentro do alcance de um dispositivo sem fio). Aplica-se a política
O dispositivo pode ser acessado pelo aplicativo usando as APIs periféricas do dispositivo com suporte (as APIs do Tempo de Execução do Windows para USB, HID, Bluetooth, Sensores e assim por diante). Se o aplicativo não puder acessar o dispositivo ou o sensor, o acesso à tarefa em segundo plano será negado. Aplica-se a política
O ponto de entrada da tarefa em segundo plano fornecido pelo aplicativo é registrado no manifesto do pacote do aplicativo. Aplica-se a política
Apenas uma tarefa em segundo plano DeviceUseTrigger está em execução por aplicativo. Aplica-se a política
O número máximo de tarefas em segundo plano DeviceUseTrigger ainda não foi atingido no dispositivo (no qual seu aplicativo está em execução). Família de dispositivos de desktop: Um número ilimitado de tarefas pode ser registrado e executado em paralelo. Família de dispositivos móveis: 1 tarefa em um dispositivo de 512 MB; caso contrário, 2 tarefas podem ser registradas e executadas em paralelo.
O número máximo de dispositivos periféricos ou sensores que seu aplicativo pode acessar de uma única tarefa em segundo plano DeviceUseTrigger , ao usar as APIs/protocolos compatíveis. ilimitado
Sua tarefa em segundo plano consome 400ms de tempo de CPU (supondo uma CPU de 1 GHz) a cada minuto quando a tela está bloqueada, ou a cada 5 minutos quando a tela não está bloqueada. O não cumprimento da política pode resultar no cancelamento da sua tarefa. Aplica-se a política

Verificações de política de tempo de execução

O Windows impõe os seguintes requisitos de política de tempo de execução enquanto sua tarefa está sendo executada em segundo plano. Se qualquer um dos requisitos de tempo de execução deixar de ser verdadeiro, o Windows cancelará a tarefa em segundo plano do dispositivo.

Esta tabela indica quais políticas de tempo de execução se aplicam a um aplicativo Universal do Windows.

Verificação de política DeviceUseTrigger em um aplicativo Universal do Windows
O dispositivo está conectado ao sistema (ou dentro do alcance de um dispositivo sem fio). Aplica-se a verificação de política
A tarefa é executar E/S regulares para o dispositivo (1 E/S a cada 5 segundos). Aplica-se a verificação de política
O aplicativo não cancelou a tarefa. Aplica-se a verificação de política
Limite de tempo do relógio de parede – a quantidade total de tempo que a tarefa do seu aplicativo pode ser executada em segundo plano. Família de dispositivos de desktop: 10 minutos. Família de dispositivos móveis: sem limite de tempo. Para conservar recursos, não mais do que 1 ou 2 tarefas podem ser executadas ao mesmo tempo.
O aplicativo não foi encerrado. Aplica-se a verificação de política

Práticas recomendadas

Veja a seguir as práticas recomendadas para aplicativos que usam as tarefas em segundo plano DeviceUseTrigger.

Programando uma tarefa em segundo plano

Usar a tarefa em segundo plano DeviceUseTrigger do seu aplicativo garante que todas as operações de sincronização ou monitoramento iniciadas no aplicativo em primeiro plano continuem a ser executadas em segundo plano se os usuários alternarem aplicativos e o aplicativo em primeiro plano for suspenso pelo Windows. Recomendamos seguir este modelo geral para registrar, acionar e cancelar o registro de suas tarefas em segundo plano:

  1. Chame RequestAccessAsync para verificar se o aplicativo é capaz de solicitar uma tarefa em segundo plano. Isso deve ser feito antes de registrar uma tarefa em segundo plano.

  2. Registre a tarefa em segundo plano antes de solicitar o gatilho.

  3. Conecte manipuladores de eventos de progresso e conclusão ao seu gatilho. Quando seu aplicativo retornar da suspensão, o Windows fornecerá ao aplicativo todos os eventos de progresso ou conclusão em fila que possam ser usados para determinar o status das tarefas em segundo plano.

  4. Feche todos os objetos de dispositivo ou sensor abertos ao disparar sua tarefa em segundo plano DeviceUseTrigger para que esses dispositivos ou sensores fiquem livres para serem abertos e usados por sua tarefa em segundo plano.

  5. Registre o gatilho.

  6. Considere cuidadosamente o impacto da bateria de acessar um dispositivo ou sensor de uma tarefa em segundo plano. Por exemplo, fazer com que o intervalo de relatório de um sensor seja executado com muita frequência pode fazer com que a tarefa seja executada com tanta frequência que drene rapidamente a bateria do telefone.

  7. Quando a tarefa em segundo plano for concluída, cancele o registro.

  8. Registre-se para eventos de cancelamento de sua classe de tarefa em segundo plano. O registro para eventos de cancelamento permitirá que o código da tarefa em segundo plano interrompa a execução da tarefa em segundo plano quando cancelada pelo Windows ou pelo aplicativo em primeiro plano.

  9. Ao sair do aplicativo (não na suspensão), cancele o registro e cancele todas as tarefas em execução se o aplicativo não precisar mais delas. Em sistemas com recursos limitados, como telefones com pouca memória, isso permitirá que outros aplicativos usem uma tarefa em segundo plano DeviceUseTrigger.

    • Quando seu aplicativo for encerrado, cancele o registro e cancele todas as tarefas em execução.

    • Quando o aplicativo for encerrado, as tarefas em segundo plano serão canceladas, e todos os manipuladores de eventos existentes serão desconectados das tarefas em segundo plano existentes. Isso impede que você determine o estado de suas tarefas em segundo plano. Cancelar o registro e cancelar a tarefa em segundo plano permitirá que seu código de cancelamento interrompa suas tarefas em segundo plano.

Cancelando uma tarefa em segundo plano

Para cancelar uma tarefa em execução em segundo plano do aplicativo em primeiro plano, use o método Unregister no objeto BackgroundTaskRegistration que você usa no aplicativo para registrar a tarefa em segundo plano DeviceUseTrigger. Cancelar o registro da tarefa em segundo plano usando o método Unregister em BackgroundTaskRegistration fará com que a infraestrutura da tarefa em segundo plano cancele a tarefa em segundo plano.

Além disso, o método Unregister usa um valor booleano true ou false para indicar se as instâncias em execução no momento da tarefa em segundo plano devem ser canceladas sem permitir que sejam concluídas. Para obter mais informações, consulte a referência da API para Cancelar registro.

Além de Cancelar registro, seu aplicativo também precisará chamar BackgroundTaskDepassal.Complete. Isso informa ao sistema que a operação assíncrona associada a uma tarefa em segundo plano foi concluída.