Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Los metadatos de dispositivo están obsoletos y se eliminarán en una futura versión de Windows. Para obtener información sobre el reemplazo de esta funcionalidad, vea Driver Package Container Metadata.
Tu aplicación para UWP puede sincronizar datos en tu 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 artículo 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 los dispositivos se sincronizan y actualizan. Para obtener más información sobre las tareas en segundo plano del dispositivo, consulta Sincronización y actualización de dispositivos para UWP.
Este artículo 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 artículo 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 en primer plano, como se hace para las tareas en segundo plano desencadenadas por el sistema. Para obtener más información, consulta 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>
Tarea en segundo plano del dispositivo
La clase de tarea en segundo plano del dispositivo implementa la IBackgroundTask interfaz y contiene el código que usted desarrolla para sincronizar o actualizar su 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 IBackgroundTask y la infraestructura de tareas en segundo plano de Windows, consulta 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
IoSyncBackgroundTaskclase implementa laIBackgroundTaskinterfaz requerida por la infraestructura de tareas en segundo plano de Windows.La clase
IoSyncBackgroundTaskobtiene la instanciaDeviceUseDetailsque se transfiere a la clase en el método Run de la claseIoSyncBackgroundTasky usa esta instancia para notificar el progreso a la aplicación de Microsoft Store y para registrarse para eventos de cancelación.El
IoSyncBackgroundTaskmétodo Run de la clase también llama a los métodos privadosOpenDeviceyWriteToDeviceAsyncque 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
BackgroundTaskRegistrationobjects.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
SetupBackgroundTaskregistra la tarea en segundo plano que se sincronizará con el dispositivo. El métodoSetupBackgroundTaskse llama desde el métodoSyncWithDeviceAsyncen el siguiente paso.Inicializa
DeviceUseTriggery lo guarda para su uso posterior.Crea un nuevo objeto
BackgroundTaskBuildery utiliza sus propiedadesNameyTaskEntryPoint, y su métodoSetTrigger, para registrar el objeto de la aplicaciónDeviceUseTriggery el nombre de la tarea en segundo plano. LaBackgroundTaskBuilderpropiedad delTaskEntryPointobjeto 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
SyncWithDeviceAsyncregistra la tarea en segundo plano que se sincronizará con el dispositivo e iniciará la sincronización en segundo plano.Llama al
SetupBackgroundTaskmétodo del paso anterior y registra la tarea en segundo plano que se sincronizará con el dispositivo.Llama al método privado
StartSyncBackgroundTaskAsyncque 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
StartSyncBackgroundTaskAsyncllama al métodoRequestAsyncdel objetoDeviceUseTrigger, que inicia y desencadena la tarea en segundo plano, y devuelve el objetoDeviceTriggerResultsdeRequestAsync, 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 está ejecutando 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
SyncWithDeviceAsyncmétodo usa elDeviceTriggerResultsobjeto devuelto desdeStartSyncBackgroundTaskAsyncpara determinar si la tarea en segundo plano se inició correctamente. Se usa una instrucción switch para inspeccionar el resultado deDeviceTriggerResultsLa aplicación en primer plano implementa un controlador de eventos privado
OnSyncWithDeviceProgressque 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 eventos privado
OnSyncWithDeviceCompletedpara 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
CheckResultsmétodo delBackgroundTaskCompletedEventArgsobjeto 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 está completa 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 eventos privado
Sync_Clickllama al métodoSyncWithDeviceAsyncdescrito en los pasos anteriores.El controlador de eventos privados
CancelSync_Clickllama al método privadoCancelSyncWithDevicepara cancelar la tarea en segundo plano.
El método privado
CancelSyncWithDeviceanula el registro y cancela las sincronizaciones de dispositivos activos para que el dispositivo se pueda volver a abrir mediante el método BackgroundTaskRegistration.Unregister .