// Handle request to register the backgroundtask
private async voidRegisterBackgroundTask_Click(object sender, RoutedEventArgse)
{
try
{
SmsDevice smsDevice =(SmsDevice)await SmsDevice.GetDefaultAsync();
}
catch(Exception ex)
{
return;
}
try
{
BackgroundTaskBuildertaskBuilder = new BackgroundTaskBuilder();
SystemTrigger trigger = newSystemTrigger(SystemTriggerType.SmsReceived, false);
taskBuilder.SetTrigger(trigger);
taskBuilder.TaskEntryPoint =BackgroundTaskEntryPoint;
taskBuilder.Name =BackgroundTaskName;
BackgroundTaskRegistrationtaskRegistration = taskBuilder.Register();
taskRegistration.Completed +=new BackgroundTaskCompletedEventHandler(OnCompleted);
}
catch(Exception ex){ }
}
// Handle request to unregister the backgroundtask
private voidUnregisterBackgroundTask_Click(object sender, RoutedEventArgse)
{
// Loopthrough all background tasks and unregister our backgroundtask
foreach(var cur in BackgroundTaskRegistration.AllTasks)
{
if (cur.Value.Name ==BackgroundTaskName)
cur.Value.Unregister(true);
}
}
// Initialize state based on currentlyregistered background tasks
public voidInitializeRegisteredSmsBackgroundTasks()
{
try
{
foreach (var item inBackgroundTaskRegistration.AllTasks)
{
IBackgroundTaskRegistration task =item.Value;
if (task.Name == BackgroundTaskName)
task.Completed += newBackgroundTaskCompletedEventHandler(OnCompleted);
}
}
catch(Exception ex) { }
}
// Handle background task completionevent.
private async voidOnCompleted(IBackgroundTaskRegistration sender,BackgroundTaskCompletedEventArgs e)
{
awaitsampleDispatcher.RunAsync(CoreDispatcherPriority.Normal,
()=>
{
try
{
if ((sender != null) && (e !=null))
{
e.CheckResult();
var key =sender.TaskId.ToString();
varsettings = ApplicationData.Current.LocalSettings;
BackgroundTaskStatus.Text = settings.Values[key].ToString();
}
}
catch (Exception ex) {}
});
}
public sealed classSampleSmsBackgroundTask : IBackgroundTask
{
public async void Run(IBackgroundTaskInstancetaskInstance)
{
taskInstance.Canceled += newBackgroundTaskCanceledEventHandler(OnCanceled);
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
awaitDisplayToastAsync(taskInstance);
varsettings = ApplicationData.Current.LocalSettings;
settings.Values[taskInstance.Task.TaskId.ToString()] ="Completed";
Debug.WriteLine("Background " + taskInstance.Task.Name + ("processran"));
deferral.Complete();
}
async TaskDisplayToastAsync(IBackgroundTaskInstance taskInstance)
{
SmsReceivedEventDetails smsDetails =(SmsReceivedEventDetails)taskInstance.TriggerDetails;
SmsDevicesmsDevice = (SmsDevice)awaitSmsDevice.FromIdAsync(smsDetails.DeviceId);
SmsBinaryMessage smsEncodedmsg = (SmsBinaryMessage)awaitsmsDevice.MessageStore.GetMessageAsync(smsDetails.MessageIndex);
SmsTextMessage smsTextMessage =SmsTextMessage.FromBinaryMessage(smsEncodedmsg);
XmlDocument toastXml =ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
XmlNodeList stringElements =toastXml.getElementsByTagName_r("text");
stringElements.Item(0).AppendChild(toastXml.CreateTextNode(smsTextMessage.From));
stringElements.Item(1).AppendChild(toastXml.CreateTextNode(smsTextMessage.Body));
ToastNotification notification = newToastNotification(toastXml);
ToastNotificationManager.CreateToastNotifier().Show(notification);
}
private void OnCanceled(IBackgroundTaskInstancesender, BackgroundTaskCancellationReason reason)
{
varsettings = ApplicationData.Current.LocalSettings;
settings.Values[sender.Task.TaskId.ToString()] = "Canceled";
Debug.WriteLine("Background " + sender.Task.Name + " CancelRequested...");
}
}