zoukankan      html  css  js  c++  java
  • 与众不同 windows phone (11) Background Task(后台任务)之警报(Alarm)和提醒(Reminder)

    [索引页]
    [源码下载]


    与众不同 windows phone (11) - Background Task(后台任务)之警报(Alarm)和提醒(Reminder)



    作者:webabcd


    介绍
    与众不同 windows phone 7.5 (sdk 7.1) 之后台任务

    • Alarm - 警报
    • Reminder - 提醒



    示例
    1、演示 Alarm(按一个时间计划弹出警报信息)
    AlarmDemo.xaml

    <phone:PhoneApplicationPage 
        x:Class="Demo.BackgroundTask.AlarmDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="Portrait" Orientation="Portrait"
        mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
        shell:SystemTray.IsVisible="True">
    
        <StackPanel Orientation="Vertical">
            <TextBlock Text="Alarm 的样式" />
            <Image Source="/BackgroundTask/Alarm.png" />
            
            <Button x:Name="btnRegister" Content="注册一个一分钟后启动的 Alarm" Click="btnRegister_Click" />
            <TextBlock x:Name="lblMsg" />
        </StackPanel>
    
    </phone:PhoneApplicationPage>

    AlarmDemo.xaml.cs

    /*
     * ScheduledAction - 所有计划活动的基类,抽象类。ScheduledNotification 和 ScheduledTask 继承自此类
     * ScheduledNotification - 用于按时间计划弹出信息,抽象类
     * 
     * Alarm - 按一个时间计划弹出警报信息,每一个程序在某个时刻最多只能有 50 个警报信息。Alarm 继承自 ScheduledNotification
     *     Name - Alarm 的名称,此名称即 ID
     *     Title - 警报的标题,这个只能显示系统默认值,无法修改
     *     Content - 警报的详细内容
     *     Sound - 警报的警报音的地址(Uri 类型)
     *     BeginTime - 在此时间点弹出警报信息(系统每隔一分钟会统一调度所有 ScheduledNotification 一次,也就是说系统会在 BeginTime 所指定时间点的一分钟之内弹出相关信息)
     *     ExpirationTime - 警报的过期时间。当弹出警报警报后,如果用户选择了“推迟”,则一段时间过后还会继续弹出此次计划的警报信息,但是在此值所指定的时间点过后则永远不再弹出此次计划的信息
     *     RecurrenceType - 弹出信息的时间计划类型。Microsoft.Phone.Scheduler.RecurrenceInterval 枚举:None|Daily|Weekly|Monthly|EndOfMonth|Yearly
     *     IsEnabled - 目前此值无用
     *     IsScheduled - 此 ScheduledAction 之后是否有执行计划(只读字段)
     *     
     * ScheduledActionService - 管理 ScheduledAction 的类
     *     ScheduledActionService.GetActions<T>() where T : ScheduledAction - 查找系统中已注册的 ScheduledAction 类型的数据
     *     ScheduledAction.Find(string name) - 按名称查找指定的 ScheduledAction
     *     ScheduledAction.Remove(string name) - 按名称删除指定的 ScheduledAction
     *     ScheduledAction.Add(ScheduledAction action) - 注册一个新的 ScheduledAction
     *     ScheduledAction.Replace(ScheduledAction action) - 更新指定的 ScheduledAction
     */
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using Microsoft.Phone.Controls;
    
    using Microsoft.Phone.Scheduler;
    
    namespace Demo.BackgroundTask
    {
        public partial class AlarmDemo : PhoneApplicationPage
        {
            public AlarmDemo()
            {
                InitializeComponent();
    
                this.Loaded += new RoutedEventHandler(AlarmDemo_Loaded);
            }
    
            void AlarmDemo_Loaded(object sender, RoutedEventArgs e)
            {
                ShowRegisteredAlarm();
            }
    
            // 显示程序中已有的 Alarm
            private void ShowRegisteredAlarm()
            {
                // IEnumerable<ScheduledNotification> notifications = ScheduledActionService.GetActions<ScheduledNotification>();
                IEnumerable<Alarm> alarms = ScheduledActionService.GetActions<Alarm>();
                lblMsg.Text = "程序中已注册的 Alarm 的名称为:" + string.Join(",", alarms.Select(p => p.Name).ToList());
            }
    
            private void btnRegister_Click(object sender, RoutedEventArgs e)
            {
                // 查找程序中指定的 Alarm,如果没有则实例化一个
                Alarm alarm = ScheduledActionService.Find("alarm") as Alarm;
                if (alarm == null)
                    alarm = new Alarm("alarm");
                    
                // alarm.Title = "Alarm Title"; // Alarm 的 Title 属性无法修改
                alarm.Content = "Alarm Content";
                alarm.Sound = new Uri("/Assets/SuperMario.mp3", UriKind.Relative);
                alarm.BeginTime = DateTime.Now.AddMinutes(1);
                alarm.ExpirationTime = DateTime.Now.AddDays(1);
                alarm.RecurrenceType = RecurrenceInterval.Daily; ;
    
                // 程序中如果有没有指定的 Alarm,则 Add,否则 Replace
                if (ScheduledActionService.Find("alarm") == null)
                    ScheduledActionService.Add(alarm);
                else
                    ScheduledActionService.Replace(alarm);
    
                ShowRegisteredAlarm();            
            }
        }
    }


    2、演示 Reminder(按一个时间计划弹出提示信息)
    ReminderDemo.xaml

    <phone:PhoneApplicationPage 
        x:Class="Demo.BackgroundTask.ReminderDemo"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
        xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        FontFamily="{StaticResource PhoneFontFamilyNormal}"
        FontSize="{StaticResource PhoneFontSizeNormal}"
        Foreground="{StaticResource PhoneForegroundBrush}"
        SupportedOrientations="Portrait" Orientation="Portrait"
        mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"
        shell:SystemTray.IsVisible="True">
    
        <StackPanel Orientation="Vertical">
            <TextBlock Text="Reminder 的样式" />
            <Image Source="/BackgroundTask/Reminder.png" />
    
            <Button x:Name="btnRegister" Content="注册一个一分钟后启动的 Reminder" Click="btnRegister_Click" />
            <TextBlock x:Name="lblMsg" />
            <TextBlock x:Name="lblParam" />
        </StackPanel>
    
    </phone:PhoneApplicationPage>

    ReminderDemo.xaml.cs

    /*
     * ScheduledAction - 所有计划活动的基类,抽象类。ScheduledNotification 和 ScheduledTask 继承自此类
     * ScheduledNotification - 用于按时间计划弹出信息,抽象类
     * 
     * Reminder - 按一个时间计划弹出提示信息,每一个程序在某个时刻最多只能有 50 个提示信息。Reminder 继承自 ScheduledNotification
     *     Name - Reminder 的名称,此名称即 ID
     *     Title - 提示的标题
     *     Content - 提示的详细内容
     *     BeginTime - 在此时间点弹出提示信息(系统每隔一分钟会统一调度所有 ScheduledNotification 一次,也就是说系统会在 BeginTime 所指定时间点的一分钟之内弹出相关信息)
     *     ExpirationTime - 提示的过期时间。当弹出提示信息后,如果用户选择了“推迟”,则一段时间过后还会继续弹出此次计划的提示信息,但是在此值所指定的时间点过后则永远不再弹出此次计划的信息
     *     RecurrenceType - 弹出信息的时间计划类型。Microsoft.Phone.Scheduler.RecurrenceInterval 枚举:None|Daily|Weekly|Monthly|EndOfMonth|Yearly
     *     NavigationUri - 单击弹出的提示框后,所链接到的目标地址(Uri 类型)
     *     IsEnabled - 目前此值无用
     *     IsScheduled - 此 ScheduledAction 之后是否有执行计划(只读字段)
     *     
     * ScheduledActionService - 管理 ScheduledAction 的类
     *     ScheduledActionService.GetActions<T>() where T : ScheduledAction - 查找系统中已注册的 ScheduledAction 类型的数据
     *     ScheduledAction Find(string name) - 按名称查找指定的 ScheduledAction
     *     ScheduledAction.Remove(string name) - 按名称删除指定的 ScheduledAction
     *     ScheduledAction.Add(ScheduledAction action) - 注册一个新的 ScheduledAction
     *     ScheduledAction.Replace(ScheduledAction action) - 更新指定的 ScheduledAction
     */
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using Microsoft.Phone.Controls;
    
    using Microsoft.Phone.Scheduler;
    
    namespace Demo.BackgroundTask
    {
        public partial class ReminderDemo : PhoneApplicationPage
        {
            public ReminderDemo()
            {
                InitializeComponent(); 
                
                this.Loaded += new RoutedEventHandler(AlarmDemo_Loaded);
            }
    
            protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
            {
                if (NavigationContext.QueryString.Count > 0)
                {
                    lblParam.Text = "参数 param 的值为:" + this.NavigationContext.QueryString["param"];
                    lblParam.Text += Environment.NewLine;
                    lblParam.Text += "参数 param2 的值为:" + this.NavigationContext.QueryString["param2"];
                }
    
                base.OnNavigatedTo(e);
            }
    
            void AlarmDemo_Loaded(object sender, RoutedEventArgs e)
            {
                ShowRegisteredReminder();
            }
    
            // 显示程序中已有的 Reminder
            private void ShowRegisteredReminder()
            {
                // IEnumerable<ScheduledNotification> notifications = ScheduledActionService.GetActions<ScheduledNotification>();
                IEnumerable<Reminder> reminders = ScheduledActionService.GetActions<Reminder>();
                lblMsg.Text = "程序中已注册的 Reminder 的名称为:" + string.Join(",", reminders.Select(p => p.Name).ToList());
            }
    
            private void btnRegister_Click(object sender, RoutedEventArgs e)
            {
                // 查找程序中指定的 Reminder,如果没有则实例化一个
                Reminder reminder = ScheduledActionService.Find("reminder") as Reminder;
                if (reminder == null)
                    reminder = new Reminder("reminder");
    
                reminder.Title = "Reminder Title";
                reminder.Content = "Reminder Content";
                reminder.BeginTime = DateTime.Now.AddMinutes(1);
                reminder.ExpirationTime = DateTime.Now.AddDays(1);
                reminder.RecurrenceType = RecurrenceInterval.Daily; ;
                reminder.NavigationUri = new Uri("/BackgroundTask/ReminderDemo.xaml?param=abc&param2=xyz", UriKind.Relative);
    
                // 程序中如果有没有指定的 Reminder,则 Add,否则 Replace
                if (ScheduledActionService.Find("reminder") == null)
                    ScheduledActionService.Add(reminder);
                else
                    ScheduledActionService.Replace(reminder);
    
                ShowRegisteredReminder();
            }
        }
    }



    OK
    [源码下载]

  • 相关阅读:
    对Spring 框架 AOP(面向切面)的理解
    页面自动刷新
    页面通过ajax传值到后台,后台返回值展示在页面输入框
    java中怎么跳出两层for循环
    人的三种思维角度
    我理解的战争(程序员是需要有立场的)
    我所理解的JavaScript中的prototype与__proto__、constructor
    一个"失速"项目的总结
    TDD学习笔记
    Java SQL动态生成库
  • 原文地址:https://www.cnblogs.com/webabcd/p/2582121.html
Copyright © 2011-2022 走看看