Creación de una tarea en segundo plano del dispositivo en Windows 8.1 (aplicaciones de dispositivos para UWP)
En Windows 8.1, la aplicación para UWP puede sincronizar datos en el dispositivo periférico. Si la aplicación está asociada a los metadatos del dispositivo, esa aplicación de dispositivo para UWP también puede realizar actualizaciones de dispositivos, como actualizaciones de firmware. En este tema se describe cómo crear una tarea en segundo plano del dispositivo que use DeviceUseTrigger o DeviceServicingTrigger. Los agentes en segundo plano del dispositivo que usan estos desencadenadores están sujetos a directivas que garantizan el consentimiento del usuario y ayudan a conservar la duración de la batería mientras se sincronizan y actualizan los dispositivos. Para obtener más información sobre las tareas en segundo plano del dispositivo, consulta Sincronización y actualización de dispositivos de aplicaciones de dispositivos para UWP.
Nota:
Este tema corresponde al Ejemplo de dispositivo USB personalizado. El Ejemplo de dispositivo USB personalizado muestra una tarea en segundo plano que realiza la sincronización de dispositivos con DeviceUseTrigger.
Aunque la tarea en segundo plano del dispositivo en el Ejemplo de dispositivo USB personalizado incluye DeviceUseTrigger, todo lo que se describe en este tema también se puede aplicar a las tareas en segundo plano del dispositivo que usan DeviceServicingTrigger. La única diferencia entre usar los dos desencadenadores son las comprobaciones de directiva realizadas por Windows.
El manifiesto de la aplicación
Para usar una tarea en segundo plano del dispositivo, la aplicación debe declararla en el archivo de manifiesto de la aplicación de la aplicación en primer plano, como se hace para las tareas en segundo plano desencadenadas por el sistema. Para obtener más información, consulte Sincronización y actualización de dispositivos para aplicaciones para UWP.
En este ejemplo de un archivo de manifiesto de paquete de aplicación, DeviceLibrary.SyncContent es un punto de entrada de la aplicación en primer plano. DeviceLibrary.SyncContent es el punto de entrada de la tarea en segundo plano que usa DeviceUseTrigger.
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
<BackgroundTasks>
<m2:Task Type="deviceUse" />
</BackgroundTasks>
</Extension>
</Extensions>
La tarea en segundo plano del dispositivo
La clase de tarea en segundo plano del dispositivo implementa la interfaz IBackgroundTask
y contiene el código real que crea para sincronizar o actualizar el dispositivo periférico. La clase de tarea en segundo plano se ejecuta cuando se desencadena la tarea en segundo plano y desde el punto de entrada proporcionado en el manifiesto de aplicación de la aplicación.
La clase en segundo plano del dispositivo en el Ejemplo de dispositivo USB personalizado contiene el código para realizar una sincronización con un dispositivo USB mediante la tarea en segundo plano DeviceUseTrigger. Para obtener detalles completos, descargue el ejemplo. Para obtener más información sobre la implementación de IBackgroundTask
y la infraestructura de tareas en segundo plano de Windows, consulte Compatibilidad de la aplicación con tareas en segundo plano.
Entre las partes clave de la tarea en segundo plano del dispositivo en el Ejemplo de dispositivo USB personalizado se incluyen las siguientes:
La clase
IoSyncBackgroundTask
implementa la interfazIBackgroundTask
requerida por la infraestructura de tareas en segundo plano de Windows.La
IoSyncBackgroundTask
clase obtiene laDeviceUseDetails
instancia pasada a la clase en el método Run de laIoSyncBackgroundTask
clase y usa esta instancia para informar del progreso de nuevo a la aplicación de Microsoft Store y para registrarse para eventos de cancelación.El método Run de la clase
IoSyncBackgroundTask
también llama a los métodos privadosOpenDevice
yWriteToDeviceAsync
, que implementan el código de sincronización del dispositivo en segundo plano.
La aplicación en primer plano
La aplicación en primer plano del Ejemplo de dispositivo USB personalizado registra y desencadena una tarea en segundo plano del dispositivo que usa DeviceUseTrigger. En esta sección se proporciona información general sobre los pasos que realizará la aplicación en primer plano para registrar, desencadenar y controlar el progreso de una tarea en segundo plano del dispositivo.
La aplicación en primer plano del Ejemplo de dispositivo USB personalizado realiza los pasos siguientes para usar una tarea en segundo plano del dispositivo:
Crea nuevos objetos DeviceUseTrigger y
BackgroundTaskRegistration
objects.Comprueba si esta aplicación registró previamente alguna tarea en segundo plano y las cancela llamando al método BackgroundTaskRegistration.Unregister en la tarea.
El método privado
SetupBackgroundTask
registra la tarea en segundo plano que se sincronizará con el dispositivo. Se llama al métodoSetupBackgroundTask
desde el métodoSyncWithDeviceAsync
en el paso siguiente.Inicializa
DeviceUseTrigger
y lo guarda para su uso posterior.Crea un nuevo objeto
BackgroundTaskBuilder
y usa sus propiedades y método deName
,TaskEntryPoint
ySetTrigger
para registrar el objetoDeviceUseTrigger
de la aplicación y el nombre de la tarea en segundo plano. La propiedadTaskEntryPoint
del objetoBackgroundTaskBuilder
se establece en el nombre completo de la clase de tarea en segundo plano que se ejecutará cuando se desencadene la tarea en segundo plano.Registra los eventos de finalización y progreso de la tarea en segundo plano para que la aplicación en primer plano pueda proporcionar actualizaciones de finalización y progreso al usuario.
El método privado
SyncWithDeviceAsync
registra la tarea en segundo plano que se sincronizará con el dispositivo e iniciará la sincronización en segundo plano.Llama al método
SetupBackgroundTask
del paso anterior y registra la tarea en segundo plano que se sincronizará con el dispositivo.Llama al método privado
StartSyncBackgroundTaskAsync
que inicia la tarea en segundo plano. Ese método cierra el identificador de la aplicación en el dispositivo para asegurarse de que la tarea en segundo plano pueda abrir el dispositivo cuando se inicie.Importante
La tarea en segundo plano deberá abrir el dispositivo para realizar la actualización, por lo que la aplicación en primer plano debe cerrar sus conexiones al dispositivo antes de llamar a
RequestAsync
.
A continuación, el método
StartSyncBackgroundTaskAsync
llama al métodoRequestAsync
del objetoDeviceUseTrigger
que desencadena la tarea en segundo plano y devuelve el objetoDeviceTriggerResults
deRequestAsync
usado para determinar si la tarea en segundo plano se inició correctamente.Importante
Windows comprueba que se han completado todas las comprobaciones de directiva de inicio de tareas necesarias. Si todas las comprobaciones de directiva se completan, la operación de actualización se ejecuta ahora como una tarea en segundo plano fuera de la aplicación en primer plano, lo que permite que la aplicación se suspenda de forma segura mientras la operación está en curso. Windows también aplicará los requisitos en tiempo de ejecución y cancelará la tarea en segundo plano si ya no se cumplen esos requisitos.
Por último, el método
SyncWithDeviceAsync
usa el objetoDeviceTriggerResults
devuelto desdeStartSyncBackgroundTaskAsync
para determinar si la tarea en segundo plano se inició correctamente. Se usa una instrucción switch para inspeccionar el resultado deDeviceTriggerResults
La aplicación en primer plano implementa un controlador de evento
OnSyncWithDeviceProgress
privado que actualizará la interfaz de usuario de la aplicación con el progreso de la tarea en segundo plano del dispositivo.La aplicación en primer plano implementa un controlador de evento
OnSyncWithDeviceCompleted
privado para controlar la transición de las tareas en segundo plano a la aplicación en primer plano cuando se ha completado la tarea en segundo plano.Usa el método
CheckResults
del objetoBackgroundTaskCompletedEventArgs
para determinar si la tarea en segundo plano produjo alguna excepción.La aplicación en primer plano vuelve a abrir el dispositivo para que lo use la aplicación ahora que la tarea en segundo plano ha finalizado y actualiza la interfaz de usuario para notificar al usuario.
La aplicación en primer plano implementa controladores de eventos de clic de botón privados desde la interfaz de usuario para iniciar y cancelar la tarea en segundo plano.
El controlador de evento
Sync_Click
privado llama al métodoSyncWithDeviceAsync
descrito en los pasos anteriores.El controlador de evento
CancelSync_Click
privado llama al métodoCancelSyncWithDevice
privado para cancelar la tarea en segundo plano.
El método
CancelSyncWithDevice
privado anula el registro y cancela las sincronizaciones de dispositivos activos para que el dispositivo se pueda volver a abrir mediante el método BackgroundTaskRegistration.Unregister.
Temas relacionados
Ejemplo de dispositivo USB personalizado
Sincronización y actualización de dispositivos para aplicaciones de dispositivos para UWP
Launching, resuming, and multitasking
Compatibilidad con la aplicación con tareas en segundo plano