Compartir a través de


Acceder a sensores y dispositivos desde una tarea en segundo plano

DeviceUseTrigger permite que tu aplicación para la Plataforma universal de Windows acceda a sensores y dispositivos periféricos en segundo plano, incluso cuando la aplicación en primer plano está suspendida. Por ejemplo, dependiendo de dónde se ejecute la aplicación, podría usar una tarea en segundo plano para sincronizar datos con dispositivos o supervisar sensores. Para ayudar a conservar la duración de la batería y garantizar el consentimiento adecuado del usuario, el uso de DeviceUseTrigger está sujeto a directivas que se describen en este tema.

Para acceder a sensores o dispositivos periféricos en segundo plano, cree una tarea en segundo plano que use DeviceUseTrigger. Para obtener un ejemplo que muestra cómo se hace esto en un equipo, consulta el ejemplo de dispositivo USB personalizado. Para obtener un ejemplo en un teléfono, consulte el ejemplo De sensores en segundo plano.

Importante

DeviceUseTrigger no se puede usar con tareas en segundo plano en proceso. La información de este tema solo se aplica a las tareas en segundo plano que se ejecutan fuera de proceso.

Información general de la tarea en segundo plano del dispositivo

Cuando la aplicación ya no sea visible para el usuario, Windows suspenderá o finalizará la aplicación para reclamar recursos de CPU y memoria. Esto permite que otras aplicaciones se ejecuten en primer plano y reducen el consumo de batería. Cuando esto sucede, sin la ayuda de una tarea en segundo plano, se perderán los eventos de datos en curso. Windows proporciona el desencadenador de tareas en segundo plano, DeviceUseTrigger, para permitir que la aplicación realice operaciones de sincronización y supervisión de larga duración en dispositivos y sensores en segundo plano, incluso si la aplicación está suspendida. Para obtener más información sobre el ciclo de vida de la aplicación, consulta Inicio, reanudación y tareas en segundo plano. Para obtener más información sobre las tareas en segundo plano, consulta Compatibilidad con la aplicación con tareas en segundo plano.

Nota En una aplicación universal de Windows, la sincronización de un dispositivo en segundo plano requiere que el usuario haya aprobado la sincronización en segundo plano por la aplicación. El dispositivo también debe estar conectado o emparejado con el equipo, con E/S activa, y se permite un máximo de 10 minutos de actividad en segundo plano. Más adelante en este tema se describen más detalles sobre la aplicación de directivas.

Limitación: operaciones críticas de dispositivos

Algunas operaciones críticas del dispositivo, como las actualizaciones de firmware de larga duración, no se pueden realizar con DeviceUseTrigger. Estas operaciones solo se pueden realizar en el equipo y solo mediante una aplicación con privilegios que use DeviceServicingTrigger. Una aplicación con privilegios es una aplicación que el fabricante del dispositivo ha autorizado para realizar esas operaciones. Los metadatos del dispositivo se usan para especificar qué aplicación, si existe, se ha designado como la aplicación con privilegios para un dispositivo. Para obtener más información, consulta Sincronización y actualización de dispositivos de Microsoft Store.

Protocolos/API admitidos en una tarea en segundo plano DeviceUseTrigger

Las tareas en segundo plano que usan DeviceUseTrigger permiten que la aplicación se comunique a través de muchos protocolos o API, la mayoría de las cuales no son compatibles con las tareas en segundo plano desencadenadas por el sistema. A continuación se admiten en una aplicación universal de Windows.

Protocolo DeviceUseTrigger en una aplicación universal de Windows
USB este protocolo es compatible.
HID este protocolo es compatible.
Bluetooth RFCOMM este protocolo es compatible.
Bluetooth GATT este protocolo es compatible.
MTP este protocolo es compatible.
Red cableada este protocolo es compatible.
Red Wi-Fi este protocolo es compatible.
IDeviceIOControl deviceservicingtrigger admite ideviceiocontrol
API de sensores deviceservicingtrigger admite api de sensores universales(limitado a los sensores de la familia de dispositivos universales)

Registro de tareas en segundo plano en el manifiesto del paquete de aplicación

La aplicación realizará operaciones de sincronización y actualización en el código que se ejecuta como parte de una tarea en segundo plano. Este código está incrustado en una clase de Windows Runtime que implementa IBackgroundTask (o en una página de JavaScript dedicada para aplicaciones de JavaScript). Para usar una tarea en segundo plano DeviceUseTrigger , la aplicación debe declararla en el archivo de manifiesto de la aplicación de una aplicación en primer plano, como lo hace para las tareas en segundo plano desencadenadas por el sistema.

En este ejemplo de un archivo de manifiesto de paquete de aplicación, DeviceLibrary.SyncContent es el punto de entrada de una tarea en segundo plano que usa DeviceUseTrigger.

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

Introducción al uso de DeviceUseTrigger

Para usar DeviceUseTrigger, siga estos pasos básicos. Para obtener más información sobre las tareas en segundo plano, consulta Compatibilidad con la aplicación con tareas en segundo plano.

  1. La aplicación registra su tarea en segundo plano en el manifiesto de la aplicación e inserta el código de tarea en segundo plano en una clase de Windows Runtime que implementa IBackgroundTask o en una página de JavaScript dedicada para aplicaciones de JavaScript.
  2. Cuando se inicie la aplicación, creará y configurará un objeto de desencadenador de tipo DeviceUseTrigger y almacenará la instancia del desencadenador para su uso futuro.
  3. La aplicación comprueba si la tarea en segundo plano se ha registrado anteriormente y, si no es así, la registra en el desencadenador. Tenga en cuenta que la aplicación no puede establecer condiciones en la tarea asociada a este desencadenador.
  4. Cuando la aplicación necesita desencadenar la tarea en segundo plano, primero debe llamar a RequestAccessAsync para comprobar si la aplicación puede solicitar una tarea en segundo plano.
  5. Si la aplicación puede solicitar la tarea en segundo plano, llama al método de activación RequestAsync en el objeto desencadenador del dispositivo.
  6. La tarea en segundo plano no está limitada, como otras tareas en segundo plano del sistema (no hay ninguna cuota de tiempo de CPU), pero se ejecutará con una prioridad reducida para mantener la capacidad de respuesta de las aplicaciones en primer plano.
  7. A continuación, Windows validará, en función del tipo de desencadenador, que se hayan cumplido las directivas necesarias, incluida la solicitud de consentimiento del usuario para la operación antes de iniciar la tarea en segundo plano.
  8. Windows supervisa las condiciones del sistema y el tiempo de ejecución de la tarea y, si es necesario, cancela la tarea si ya no se cumplen las condiciones necesarias.
  9. Cuando las tareas en segundo plano notifican el progreso o la finalización, la aplicación recibirá estos eventos a través de los eventos de progreso y finalizados en la tarea registrada.

Importante Tenga en cuenta estos puntos importantes al usar DeviceUseTrigger:

  • La capacidad de desencadenar mediante programación tareas en segundo plano que usan DeviceUseTrigger se introdujo por primera vez en Windows 8.1 y Windows Phone 8.1.

  • Windows aplica ciertas directivas para garantizar el consentimiento del usuario al actualizar dispositivos periféricos en el equipo.

  • Se aplican directivas adicionales para conservar la duración de la batería del usuario al sincronizar y actualizar dispositivos periféricos.

  • Windows puede cancelar las tareas en segundo plano que usan DeviceUseTrigger cuando ya no se cumplen determinados requisitos de directiva, incluida una cantidad máxima de tiempo en segundo plano (tiempo de reloj). Es importante tener en cuenta estos requisitos de directiva al usar estas tareas en segundo plano para interactuar con el dispositivo periférico.

Sugerencia Para ver cómo funcionan estas tareas en segundo plano, descargue un ejemplo. Para obtener un ejemplo que muestra cómo se hace esto en un equipo, consulta el ejemplo de dispositivo USB personalizado. Para obtener un ejemplo en un teléfono, consulte el ejemplo De sensores en segundo plano.  

Restricciones de frecuencia y primer plano

No hay ninguna restricción en la frecuencia con la que la aplicación puede iniciar operaciones, pero la aplicación solo puede ejecutar una operación de tarea en segundo plano DeviceUseTrigger a la vez (esto no afecta a otros tipos de tareas en segundo plano) y puede iniciar una tarea en segundo plano solo mientras la aplicación está en primer plano. Cuando la aplicación no está en primer plano, no puede iniciar una tarea en segundo plano con DeviceUseTrigger. La aplicación no puede iniciar una segunda tarea en segundo plano DeviceUseTrigger antes de que se haya completado la primera tarea en segundo plano.

Restricciones de dispositivos

Aunque cada aplicación está limitada a registrar y ejecutar solo una tarea en segundo plano DeviceUseTrigger, el dispositivo (en el que se ejecuta la aplicación) puede permitir que varias aplicaciones se registren y ejecuten tareas en segundo plano de DeviceUseTrigger. En función del dispositivo, puede haber un límite en el número total de tareas en segundo plano deviceUseTrigger de todas las aplicaciones. Esto ayuda a conservar la batería en dispositivos con restricciones de recursos. Consulte la tabla siguiente para obtener más detalles.

Desde una sola tarea en segundo plano DeviceUseTrigger , la aplicación puede acceder a un número ilimitado de dispositivos periféricos o sensores, limitado solo por las API y protocolos admitidos que se enumeraron en la tabla anterior.

Directivas de tareas en segundo plano

Windows aplica directivas cuando la aplicación usa una tarea en segundo plano DeviceUseTrigger. Si no se cumplen estas directivas, es posible que se cancele la tarea en segundo plano. Es importante tener en cuenta estos requisitos de directiva al usar este tipo de tarea en segundo plano para interactuar con dispositivos o sensores.

Directivas de inicio de tareas

En esta tabla se indican las directivas de inicio de tareas que se aplican a una aplicación universal de Windows.

Directiva DeviceUseTrigger en una aplicación universal de Windows
La aplicación está en primer plano al desencadenar la tarea en segundo plano. se aplica la directiva
El dispositivo está conectado al sistema (o en rango para un dispositivo inalámbrico). se aplica la directiva
El dispositivo es accesible para la aplicación mediante las API de periféricos de dispositivo compatibles (las API de Windows Runtime para USB, HID, Bluetooth, Sensores, etc.). Si la aplicación no puede acceder al dispositivo o el sensor, se deniega el acceso a la tarea en segundo plano. se aplica la directiva
El punto de entrada de tarea en segundo plano que proporciona la aplicación se registra en el manifiesto del paquete de la aplicación. se aplica la directiva
Solo se ejecuta una tarea en segundo plano DeviceUseTrigger por aplicación. se aplica la directiva
Todavía no se ha alcanzado el número máximo de tareas en segundo plano de DeviceUseTrigger en el dispositivo (en el que se ejecuta la aplicación). Familia de dispositivos de escritorio: se puede registrar y ejecutar un número ilimitado de tareas en paralelo. Familia de dispositivos móviles: 1 tarea en un dispositivo de 512 MB; en caso contrario, se pueden registrar y ejecutar 2 tareas en paralelo.
El número máximo de dispositivos periféricos o sensores a los que la aplicación puede acceder desde una sola tarea en segundo plano DeviceUseTrigger , al usar las API o protocolos admitidos. sin límite
La tarea en segundo plano consume 400 ms de tiempo de CPU (suponiendo una CPU de 1GHz) cada minuto cuando la pantalla está bloqueada o cada 5 minutos cuando la pantalla no está bloqueada. Si no se cumple esta directiva, se puede cancelar la tarea. se aplica la directiva

Comprobaciones de directivas en tiempo de ejecución

Windows aplica los siguientes requisitos de directiva en tiempo de ejecución mientras la tarea se ejecuta en segundo plano. Si alguno de los requisitos en tiempo de ejecución deja de ser true, Windows cancelará la tarea en segundo plano del dispositivo.

En esta tabla se indican las directivas en tiempo de ejecución que se aplican a una aplicación universal de Windows.

Comprobación de directivas DeviceUseTrigger en una aplicación universal de Windows
El dispositivo está conectado al sistema (o en rango para un dispositivo inalámbrico). Se aplica la comprobación de directivas
La tarea realiza E/S normal en el dispositivo (1 E/S cada 5 segundos). Se aplica la comprobación de directivas
La aplicación no ha cancelado la tarea. Se aplica la comprobación de directivas
Límite de tiempo del reloj: la cantidad total de tiempo que la tarea de la aplicación se puede ejecutar en segundo plano. Familia de dispositivos de escritorio: 10 minutos. Familia de dispositivos móviles: sin límite de tiempo. Para conservar los recursos, no se pueden ejecutar más de 1 o 2 tareas a la vez.
La aplicación no se ha cerrado. Se aplica la comprobación de directivas

procedimientos recomendados

A continuación se muestran los procedimientos recomendados para las aplicaciones que usan las tareas en segundo plano deviceUseTrigger.

Programación de una tarea en segundo plano

El uso de la tarea en segundo plano DeviceUseTrigger de la aplicación garantiza que las operaciones de sincronización o supervisión iniciadas desde la aplicación en primer plano sigan ejecutándose en segundo plano si los usuarios cambian de aplicaciones y la aplicación en primer plano está suspendida por Windows. Se recomienda seguir este modelo general para registrar, desencadenar y anular el registro de las tareas en segundo plano:

  1. Llame a RequestAccessAsync para comprobar si la aplicación puede solicitar una tarea en segundo plano. Esto debe hacerse antes de registrar una tarea en segundo plano.

  2. Registre la tarea en segundo plano antes de solicitar el desencadenador.

  3. Conecte controladores de eventos de progreso y finalización al desencadenador. Cuando la aplicación vuelva de la suspensión, Windows proporcionará a la aplicación los eventos de progreso o finalización en cola que se pueden usar para determinar el estado de las tareas en segundo plano.

  4. Cierre los objetos de dispositivo o sensor abiertos cuando desencadene la tarea en segundo plano DeviceUseTrigger para que esos dispositivos o sensores estén abiertos y usados por la tarea en segundo plano.

  5. Registre el desencadenador.

  6. Considere cuidadosamente el impacto de la batería de acceder a un dispositivo o a un senor desde una tarea en segundo plano. Por ejemplo, tener el intervalo de informe de una ejecución del sensor con demasiada frecuencia podría hacer que la tarea se ejecute con tanta frecuencia que agote rápidamente la batería de un teléfono.

  7. Cuando se complete la tarea en segundo plano, anule el registro.

  8. Regístrese para eventos de cancelación desde la clase de tareas en segundo plano. Registrarse para eventos de cancelación permitirá que el código de la tarea en segundo plano detenga limpiamente la tarea en segundo plano en ejecución cuando Windows o la aplicación en primer plano la cancelen.

  9. En la salida de la aplicación (no suspensión), anule el registro y cancele las tareas en ejecución si la aplicación ya no las necesita. En sistemas con restricción de recursos, como teléfonos con poca memoria, esto permitirá que otras aplicaciones usen una tarea en segundo plano DeviceUseTrigger.

    • Al salir de la aplicación, anule el registro y cancele las tareas en ejecución.

    • Al salir de la aplicación, las tareas en segundo plano se cancelarán y los controladores de eventos existentes se desconectarán de las tareas en segundo plano existentes. Esto evita que determine el estado de las tareas en segundo plano. Anular el registro y cancelar la tarea en segundo plano permitirá que el código de cancelación detenga limpiamente las tareas en segundo plano.

Cancelación de una tarea en segundo plano

Para cancelar una tarea que se ejecuta en segundo plano desde la aplicación en primer plano, usa el método Unregister en el objeto BackgroundTaskRegistration que usas en tu aplicación para registrar la tarea en segundo plano DeviceUseTrigger. Anular el registro de la tarea en segundo plano mediante el método Unregister en BackgroundTaskRegistration hará que la infraestructura de tareas en segundo plano cancele la tarea en segundo plano.

El método Unregister toma además un valor booleano true o false para indicar si las instancias que se están ejecutando actualmente de la tarea en segundo plano deben cancelarse sin permitirles finalizar. Para obtener más información, consulte la referencia de API para anular el registro.

Además de Anular registro, la aplicación también tendrá que llamar a BackgroundTaskDeferral.Complete. Esto informa al sistema de que la operación asincrónica asociada a una tarea en segundo plano ha finalizado.