// Handle request to register the background
task
private async void
RegisterBackgroundTask_Click(object sender, RoutedEventArgs
e)
{
try
{
SmsDevice smsDevice =
(SmsDevice)await SmsDevice.GetDefaultAsync();
}
catch
(Exception ex)
{
return;
}
try
{
BackgroundTaskBuilder
taskBuilder = new BackgroundTaskBuilder();
SystemTrigger trigger = new
SystemTrigger(SystemTriggerType.SmsReceived, false);
taskBuilder.SetTrigger(trigger);
taskBuilder.TaskEntryPoint =
BackgroundTaskEntryPoint;
taskBuilder.Name =
BackgroundTaskName;
BackgroundTaskRegistration
taskRegistration = taskBuilder.Register();
taskRegistration.Completed +=
new BackgroundTaskCompletedEventHandler(OnCompleted);
}
catch
(Exception ex){ }
}
// Handle request to unregister the background
task
private void
UnregisterBackgroundTask_Click(object sender, RoutedEventArgs
e)
{
// Loop
through all background tasks and unregister our background
task
foreach
(var cur in BackgroundTaskRegistration.AllTasks)
{
if (cur.Value.Name ==
BackgroundTaskName)
cur.Value.Unregister(true);
}
}
// Initialize state based on currently
registered background tasks
public void
InitializeRegisteredSmsBackgroundTasks()
{
try
{
foreach (var item in
BackgroundTaskRegistration.AllTasks)
{
IBackgroundTaskRegistration task =
item.Value;
if (task.Name == BackgroundTaskName)
task.Completed += new
BackgroundTaskCompletedEventHandler(OnCompleted);
}
}
catch
(Exception ex) { }
}
// Handle background task completion
event.
private async void
OnCompleted(IBackgroundTaskRegistration sender,
BackgroundTaskCompletedEventArgs e)
{
await
sampleDispatcher.RunAsync(CoreDispatcherPriority.Normal,
()
=>
{
try
{
if ((sender != null) && (e !=
null))
{
e.CheckResult();
var key =
sender.TaskId.ToString();
var
settings = ApplicationData.Current.LocalSettings;
BackgroundTaskStatus.Text = settings.Values[key].ToString();
}
}
catch (Exception ex) {
}
});
}
public sealed class
SampleSmsBackgroundTask : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance
taskInstance)
{
taskInstance.Canceled += new
BackgroundTaskCanceledEventHandler(OnCanceled);
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
await
DisplayToastAsync(taskInstance);
var
settings = ApplicationData.Current.LocalSettings;
settings.Values[taskInstance.Task.TaskId.ToString()] =
"Completed";
Debug.WriteLine("Background " + taskInstance.Task.Name + ("process
ran"));
deferral.Complete();
}
async Task
DisplayToastAsync(IBackgroundTaskInstance taskInstance)
{
SmsReceivedEventDetails smsDetails =
(SmsReceivedEventDetails)taskInstance.TriggerDetails;
SmsDevice
smsDevice = (SmsDevice)await
SmsDevice.FromIdAsync(smsDetails.DeviceId);
SmsBinaryMessage smsEncodedmsg = (SmsBinaryMessage)await
smsDevice.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 = new
ToastNotification(toastXml);
ToastNotificationManager.CreateToastNotifier().Show(notification);
}
private void OnCanceled(IBackgroundTaskInstance
sender, BackgroundTaskCancellationReason reason)
{
var
settings = ApplicationData.Current.LocalSettings;
settings.Values[sender.Task.TaskId.ToString()] = "Canceled";
Debug.WriteLine("Background " + sender.Task.Name + " Cancel
Requested...");
}
}