c# - Tarea de fondo de registro en la aplicación Silverlight 8.1
windows-phone-8.1 (1)
Estoy trabajando en una aplicación que utiliza BLE para comunicarme con un elemento y necesito recibir notificaciones en segundo plano. Soy consciente de la existencia de GattCharacteristicNotificationTrigger
pero no puedo encontrar ninguna forma de registrar una tarea de fondo en una aplicación de Silverlight 8.1.
¿Algún consejo?
El registro de un BackgroundTask está bastante bien explicado aquí en MSDN .
Aquí se muestra un simple ejemplo disparado sobre TimeTrigger y mostrando un Toast, los pasos son (se aplica a ambas aplicaciones, RunTime y Silverlight):
- 1. BackgroungTask debe ser un Componenet de Windows Runtime (no importa si su aplicación es Runtime o Silverlight). Para agregar uno nuevo, haga clic con el botón secundario en la ventana Solución en el Explorador de soluciones en VS, seleccione Agregar y luego Nuevo proyecto y elija el Componente de tiempo de ejecución de Windows .
- 2. Agregue una referencia en su proyecto principal.
- 3. Especifique las declaraciones en el archivo Package.appxmanifest : debe agregar una tarea de Backgorund , marcar el temporizador y especificar el punto de entrada para la tarea. El Entry Point será un
Namespace.yourTaskClass
(que implementa IBackgroundTask
): el componente de tiempo de ejecución de Windows agregado. - 4. ¿Cómo se ve tu BackgroundTask? - digamos que queremos enviar un brindis (por supuesto, puede ser muchas otras cosas):
namespace myTask // the Namespace of my task
{
public sealed class FirstTask : IBackgroundTask // sealed - important
{
public void Run(IBackgroundTaskInstance taskInstance)
{
// simple example with a Toast, to enable this go to manifest file
// and mark App as TastCapable - it won''t work without this
// The Task will start but there will be no Toast.
ToastTemplateType toastTemplate = ToastTemplateType.ToastText02;
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
XmlNodeList textElements = toastXml.GetElementsByTagName("text");
textElements[0].AppendChild(toastXml.CreateTextNode("My first Task"));
textElements[1].AppendChild(toastXml.CreateTextNode("I''m message from your background task!"));
ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml));
}
}
}
- 5. Finalmente, vamos a registrar nuestra BackgroundTask en el proyecto principal:
private async void Button_Click(object sender, RoutedEventArgs e)
{
// Windows Phone app must call this to use trigger types (see MSDN)
await BackgroundExecutionManager.RequestAccessAsync();
BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder { Name = "First Task", TaskEntryPoint = "myTask.FirstTask" };
taskBuilder.SetTrigger(new TimeTrigger(15, true));
BackgroundTaskRegistration myFirstTask = taskBuilder.Register();
}
Compile, ejecute y debería funcionar. Como puede ver, la tarea debe comenzar después de 15 minutos (esta vez puede variar a medida que el sistema operativo programe la tarea en intervalos específicos, por lo que se activará entre 15 y 30 minutos). Pero, ¿cómo depurar una tarea más rápido?
Hay una manera simple: vaya a la barra de herramientas de ubicación de depuración y verá un evento de ciclo de vida desplegable, elija su tarea y se disparará (a veces abrir / cerrar el menú desplegable para actualizarlo).
Aquí puede descargar mi código de muestra: WP8.1 Silverlight App.