分享

Windows8SMS后台任务

 牛人的尾巴 2015-12-01

Windows8SMS后台任务

(2013-01-17 11:13:18)
标签:

杂谈

        private const string BackgroundTaskEntryPoint = "SmsBackgroundTask.SampleSmsBackgroundTask";
        private const string BackgroundTaskName = "SampleSmsBackgroundTask";

        // 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...");
        }
    }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多