badge-----百度翻译给的解释如下
徽章,像章,奖章; 象征,标记; [美国俚语]警察;以…为标志; 使佩带像章(或徽章、标记); 给予…标记(或徽号); 授予…奖章(或徽章);
总的来说呢,锁屏通知就是应用自身的一个信息标记,可以是数字也可以是字形标记。用来干嘛的呢,就是给我们用
户一个醒目的感觉,提醒我们某个应用的内容更新了
在手机上常见的显示形式是应用磁贴右上角的数字或者字形提示,还有就是锁屏时候的锁屏界面的徽章和图块文本通
知,以图为证:
数字都可以理解,字形呢就指右上角对应的(alert)和(attention)
要实现以上功能呢,当然代码肯定是少不了写的了,但是代码之前一是要熟悉一些配置的问题,并且认识核心类
首先,当我代码都吭哧吭哧的写好之后,发现为什么锁屏中没有出现应用的效果呢,这是因为你没配置清单文件和手
机自带的设置,具体如下:
1.程序的清单文件Package.appxmanifest->应用程序->锁定屏幕通知->徽章和图块文本,有图有真相:
2.程序的清单文件Package.appxmanifest->可见资产->徽章徽标->然后自己选择提前准备好的图片即可(注意上面的
尺寸要求),有图有真相:
你不必把3个图片都整上去,可以只整一个即可,因为最终总是显示的那么小,当然也可以自己分别尝试一下这3个,
看看差异如何。
3.在调试的时候,不管在实体机上还是调试模拟机上,都要在设置里面不要把锁屏时间设置为无,要不然模拟机上锁
不了屏,那就看不了锁屏效果喽,我一般设置30秒,让它尽快锁屏,这样就能看到效果了。当然实体机上装了锁屏软
件的直接一键锁屏也可以。
设置->锁屏界面->屏幕超时->设置成30秒
同时呢,在锁屏界面设置中有一项通知,通知里面有一项选择应用以显示即时状态,点“+”号将自己写的那个应用
加进去。有图有真相:
注意第三个“+”号,经过选择选择应用之后就被应用图标填充了。(我这边示例应用叫Reminder)
配置完了,其次就要认识核心类了,主要用到了BadgeUpdateManager和BadgeNotification这两个类。
其实,涉及到通知,这边一般都是采用的XML的模板。整个通知结构就可以看做是一个XML结构树。
MSDN的BadgeUpdateManager解释:BadgeUpdateManager class
MSDN的BadgeNotification解释:BadgeNotification class
另外的XmlDocument和XmlElement也需要了解一下
XmlDocument:XmlDocument 类
XmlElement:XmlElement 类
好了,伪代码贴出来:
public sealed partial class MainPage : Page
{
int i = 1;
public MainPage()
{
this.InitializeComponent();
this.NavigationCacheMode = NavigationCacheMode.Required;
//数字XML模板
XmlDocument badgeXml = BadgeUpdateManager.GetTemplateContent(BadgeTemplateType.BadgeNumber);
//字形XML模板
XmlDocument badgeXml2 = BadgeUpdateManager.GetTemplateContent(BadgeTemplateType.BadgeGlyph);
//设置数字的值为17,如果数字大于99,则表示为99+
XmlElement badgeElement = (XmlElement)badgeXml.SelectSingleNode("/badge");
badgeElement.SetAttribute("value", "17");
//设置字形的值(自行分为alert和attention,相关显示图形徽章如开头介绍的那样)
XmlElement badgeElement2 = (XmlElement)badgeXml2.SelectSingleNode("/badge");
badgeElement2.SetAttribute("value", "alert");
//badgeElement2.SetAttribute("value", "attention");
//创建锁屏提醒通知
BadgeNotification badge = new BadgeNotification(badgeXml);
//将锁屏提醒通知发送到锁屏
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badge);
//DispatcherTimer timer = new DispatcherTimer();
//timer.Interval = new TimeSpan(0,0,3);
//timer.Tick += timer_Tick;
//timer.Start();
}
//void timer_Tick(object sender, object e)
//{
// XmlDocument badgeXml = BadgeUpdateManager.GetTemplateContent(BadgeTemplateType.BadgeNumber);
// XmlElement badgeElement = (XmlElement)badgeXml.SelectSingleNode("/badge");
// badgeElement.SetAttribute("value", i.ToString());
// BadgeNotification badge = new BadgeNotification(badgeXml);
// BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badge);
// i++;
//}
运行一下即可,就能出现一开始我所描述的效果了。
这只是静态指定的,但是一般这种需求都是要涉及到后台任务的,应用一旦有内容更新,通过后台进行提醒通知的。
关于后台任务,我的博客中也有:Windows Phone 8.1后台任务
其实上面的代码呢,我也用计时器试试,验证是否在应用打开的情况下(注意应用不要挂起,更不是关闭),屏幕自动
锁屏后,在锁屏界面上的数字是否会按照计时器的变化而每隔3秒钟增加的,事实上,我试了下,增加是会增加的,
但是效果不是很好,有时候数字停在那边,过一会一下增加的很快。但是结果还是会增加的。
还有就是应用挂起和应用关闭后还会显示吗,答案是会显示的,不过那就真正是静态的了。除非你卸载掉应用,要不
然是一直会有锁屏通知的。你可以这样理解,就是应用打开的时候就给了手机一个锁屏通知,然后就撒手不管了,让
锁屏显示去吧。不管之后应用程序挂起了还是被杀死了,锁屏还是接管着这个通知。但是之后你再一次打开应用的时
候,应用会再次发一次锁屏通知,前面的通知就没有意义了,也可以说是过时了。之后应用依旧不管它了。
大家可以多试试,按照自己的想法或者奇妙的点子多去尝试下。
実に おもしろい