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 é 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 duração da bateria e garantir o consentimento do usuário apropriado, o uso de DeviceUseTrigger está sujeito a 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 PC, consulte o exemplo de dispositivo USB personalizado . Para obter um exemplo em um telefone, consulte o exemplo de Sensores de Plano de Fundo .

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 acontecer, 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 execução prolongada em dispositivos e sensores com segurança em segundo plano, mesmo que seu aplicativo seja suspenso. Para obter mais informações sobre o ciclo de vida do aplicativo, consulte Iniciar, retomar e tarefas em segundo plano. Para obter mais informações sobre tarefas em segundo plano, consulte Suporte ao aplicativo com tarefas em segundo plano.

Nota Em um aplicativo Universal do Windows, a sincronização de um dispositivo em segundo plano exige que o usuário tenha aprovado a sincronização em segundo plano pelo seu aplicativo. O dispositivo também deve ser conectado ou emparelhado com o computador, com E/S ativa e é permitido um máximo de 10 minutos de atividade em segundo plano. Mais detalhes sobre a imposiçã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, tais como atualizações de firmware de longa duração, não podem ser executadas com o DeviceUseTrigger. Essas operações só podem ser executadas no computador e somente por um aplicativo privilegiado que usa o DeviceServicingTrigger. Um aplicativo privilegiado é aquele que o fabricante do dispositivo autorizou a 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 da Microsoft Store.

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

As tarefas em segundo plano que usam DeviceUseTrigger permitem que seu aplicativo se comunique por vários protocolos/APIs, a maioria dos quais não são compatíveis com tarefas em segundo plano disparadas pelo sistema. Os seguintes recursos são compatíveis com um aplicativo Universal do Windows.

Protocolo DeviceUseTrigger em um aplicativo Universal do Windows
USB há suporte para esse protocolo.
ESCONDIDO há suporte para esse protocolo.
Bluetooth RFCOMM há suporte para esse protocolo.
Bluetooth GATT há suporte para esse protocolo.
MTP há suporte para esse protocolo.
Rede com fio há suporte para esse protocolo.
Rede Wi-Fi há suporte para esse protocolo.
IDeviceIOControl deviceservicingtrigger é compatível com ideviceiocontrol
API de sensores deviceservicingtrigger dá suporte a apis de sensores universais (limitado a sensores na da família de dispositivos universais)

Registrando tarefas em segundo plano no manifesto do pacote de aplicativo

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 Windows Runtime 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 de um aplicativo em primeiro plano, assim como é feito para tarefas em segundo plano ativadas pelo sistema.

Neste exemplo de um arquivo de manifesto do pacote do aplicativo, DeviceLibrary.SyncContent é o ponto de entrada de 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 Suporte ao aplicativo com tarefas em segundo plano.

  1. Seu aplicativo registra sua tarefa em segundo plano no manifesto do aplicativo e inscreve 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 o 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 já foi registrada e, caso contrário, a registra em relação ao 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 runtime da tarefa e, se necessário, cancela a tarefa se as condições necessárias não forem mais atendidas.
  9. Quando as tarefas em segundo plano relatam progresso ou conclusão, seu aplicativo receberá esses eventos através dos eventos de progresso e conclusão na tarefa registrada.

Importante Considere esses pontos importantes ao usar o DeviceUseTrigger

  • A capacidade de acionar tarefas em segundo plano programaticamente 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 impostas para preservar a duração da bateria do usuário ao sincronizar e atualizar dispositivos periféricos.

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

Ponta Para ver como essas tarefas em segundo plano funcionam, baixe um exemplo. Para obter um exemplo que mostra como isso é feito em um PC, consulte o exemplo de dispositivo USB personalizado . Para obter um exemplo em um telefone, consulte o exemplo de Sensores de Plano de Fundo .  

Restrições de frequência e primeiro plano

Não há nenhuma restrição na 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 apenas enquanto seu aplicativo está em primeiro plano. Quando o aplicativo não está em primeiro plano, não é possível iniciar uma tarefa em segundo plano com DeviceUseTrigger. Seu aplicativo não pode iniciar uma segunda tarefa em segundo plano do DeviceUseTrigger antes da conclusão da primeira tarefa em segundo plano.

Restrições do dispositivo

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

Em uma única tarefa em segundo plano DeviceUseTrigger, seu aplicativo pode acessar um número ilimitado de dispositivos periféricos ou sensores, limitado 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 do 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 tarefa

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

Política DeviceUseTrigger em um aplicativo Universal do Windows
Seu aplicativo está em primeiro plano quando a tarefa em segundo plano é acionada. se aplicaA política
O dispositivo está conectado ao sistema (ou dentro do alcance de um dispositivo sem fio). se aplicaA política
O dispositivo é acessível ao aplicativo usando as APIs periféricas do dispositivo com suporte (as APIs do Windows Runtime 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. se aplicaA política
O ponto de entrada da tarefa em segundo plano fornecido pelo aplicativo é registrado no manifesto do pacote do aplicativo. se aplicaA política
Apenas uma tarefa em segundo plano do DeviceUseTrigger está em execução por aplicativo. se aplicaA política
O número máximo de tarefas em segundo plano de DeviceUseTrigger ainda não foi atingido no dispositivo (no qual seu aplicativo está em execução). Família de dispositivos 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 DeviceUseTrigger tarefa em segundo plano ao utilizar as APIs/protocolos com suporte. ilimitado
Sua tarefa em segundo plano consome 400 ms de tempo de CPU (supondo uma CPU de 1GHz) a cada minuto quando a tela está bloqueada ou a cada 5 minutos quando a tela não está bloqueada. A falha ao atender a essa política pode resultar no cancelamento de sua tarefa. se aplicaA política

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

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

Esta tabela indica quais políticas de runtime 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). verificação de política se aplica
A tarefa está executando E/S regular ao dispositivo (1 E/S a cada 5 segundos). verificação de política se aplica
O aplicativo não cancelou a tarefa. verificação de política se aplica
Limite de tempo do relógio de parede – a quantidade total de tempo que a tarefa do aplicativo pode ser executada em segundo plano. Família de dispositivos desktop: 10 minutos. Família de dispositivos móveis: sem limite de tempo. Para conservar recursos, no máximo 1 ou 2 tarefas podem ser executadas ao mesmo tempo.
O aplicativo não foi encerrado. verificação de política se aplica

Práticas recomendadas

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

Programando uma tarefa em segundo plano

O uso da tarefa em segundo plano DeviceUseTrigger do seu aplicativo garante que todas as operações de sincronização ou monitoramento iniciadas em seu aplicativo em primeiro plano continuem em execução no segundo plano caso os usuários alternem entre aplicativos e seu aplicativo em primeiro plano seja suspenso pelo Windows. Recomendamos que você siga este modelo geral para registrar, disparar 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 acionador. Quando seu aplicativo retornar da suspensão, o Windows fornecerá ao seu aplicativo quaisquer eventos de progresso ou conclusão enfileirados que possam ser usados para determinar o status de suas tarefas em segundo plano.

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

  5. Registre o gatilho.

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

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

  8. Registre eventos de cancelamento para sua classe de tarefa em segundo plano. O registro de 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. Na saída do aplicativo (não suspensão), cancele o registro e cancele as tarefas em execução se o aplicativo não precisar mais delas. Em sistemas com restrição de recursos, como telefones com pouca memória, isso permitirá que outros aplicativos usem uma tarefa em segundo plano específica do DeviceUseTrigger.

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

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

Cancelando uma tarefa em segundo plano

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

O método Desregistrar também usa um valor booleano verdadeiro ou falso para indicar se as instâncias atualmente em execução da sua tarefa em segundo plano devem ser canceladas sem permitir que sejam concluídas. Para obter mais informações, consulte a referência de API para cancelar o registro.

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