Ejecución de nuevos eventos en segundo plano recibidos por SMS
La plataforma SMS de banda ancha móvil proporciona eventos del sistema independientes para los nuevos datos SMS que se reciben, dependiendo de si se trata de una notificación de SMS administrativa de un operador de red móvil o un mensaje SMS general. El evento del sistema en segundo plano para una nueva notificación de SMS administrativa que se recibe de un operador de red móvil solo es accesible por una aplicación de banda ancha móvil.
Las aplicaciones ya deben haber recibido el consentimiento del usuario para usar SMS para leer nuevos mensajes SMS recibidos en tareas en segundo plano. Las aplicaciones no pueden leer el contenido de un nuevo mensaje SMS recibido de una tarea en segundo plano si acceden a SMS por primera vez, ya que la aplicación no puede desencadenar la solicitud de consentimiento del dispositivo SMS del sistema desde una tarea en segundo plano.
En los ejemplos de código siguientes se muestra una tarea en segundo plano diseñada para ejecutarse cuando se recibe un nuevo mensaje SMS.
Código de tarea en segundo plano de C#
namespace SmsBackgroundSample
{
public sealed class SmsBackgroundTask : IBackgroundTask
{
// The Run method is the entry point of a background task.
public void Run(IBackgroundTaskInstance taskInstance)
{
// Associate a cancellation handler with the background task.
taskInstance.Canceled += new BackgroundTaskCanceledEventHandler(OnCanceled);
ManualResetEvent manualEventWaiter = new ManualResetEvent(false);
manualEventWaiter.Reset();
// Do the background task activity.
DisplayToastAsync(taskInstance, manualEventWaiter);
// Wait until the async operation is done. We need to do this else the background process will exit.
manualEventWaiter.WaitOne(5000);
Debug.Print("Background " + taskInstance.Task.Name + (" process ran"));
}
async void DisplayToastAsync(IBackgroundTaskInstance taskInstance, ManualResetEvent manualEventWaiter)
{
SmsReceivedEventDetails smsDetails = (SmsReceivedEventDetails)taskInstance.TriggerDetails;
SmsBinaryMessage smsEncodedmsg = (SmsBinaryMessage) smsDetails.BinaryMessageMessage;
SmsTextMessage smsTextMessage = Windows.Devices.Sms.SmsTextMessage.FromBinaryMessage(smsEncodedmsg);
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
stringElements.Item(0).AppendChild(toastXml.CreateTextNode(smsTextMessage.From));
stringElements.Item(1).AppendChild(toastXml.CreateTextNode(smsTextMessage.Body));
ToastNotification notification = new ToastNotification(toastXml);
ToastNotificationManager.CreateToastNotifier().Show(notification);
manualEventWaiter.Set();
}
}
Código de aplicación de JavaScript para registrar la tarea en segundo plano
var triggerAway = new Windows.ApplicationModel.Background.SystemTrigger(Windows.ApplicationModel.Background.SystemTriggerType.smsReceived, false);
var builderAway = new Windows.ApplicationModel.Background.BackgroundTaskBuilder();
builderAway.setTrigger(triggerAway);
builderAway.taskEntryPoint = "HelloWorldBackground.BackgroundTask1";
builderAway.name = "Sms";
var taskAway = builderAway.register();
taskAway.addEventListener("progress", new ProgressHandler(taskAway).onProgress);
taskAway.addEventListener("completed", new CompleteHandler(taskAway).onCompleted);