背水一战 Windows 10 (112) - 通知(Badge): application 的 badge 通知, secondary 的 badge 通知, 轮询服务端以更新 badge 通知
作者:webabcd
介绍
背水一战 Windows 10 之 通知(Badge)
- application 的 badge 通知
- secondary 的 badge 通知
- 轮询服务端以更新 badge 通知
示例
1、本例用于演示 application 的 badge 通知
Notification/Badge/ApplicationBadge.xaml
<Page
x:Class="Windows10.Notification.Badge.ApplicationBadge"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Notification.Badge"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <Button Name="btnUpdateBadgeWidthNumber" Content="以数字的方式更新 Application Badge" Click="btnUpdateBadgeWidthNumber_Click" Margin="5" /> <StackPanel Orientation="Horizontal" Margin="5">
<ComboBox Name="cmbBadgeValue">
<ComboBoxItem Content="activity" IsSelected="True" />
<ComboBoxItem Content="alarm" />
<ComboBoxItem Content="alert" />
<ComboBoxItem Content="attention" />
<ComboBoxItem Content="available" />
<ComboBoxItem Content="away" />
<ComboBoxItem Content="busy" />
<ComboBoxItem Content="error" />
<ComboBoxItem Content="newMessage" />
<ComboBoxItem Content="paused" />
<ComboBoxItem Content="playing" />
<ComboBoxItem Content="unavailable" />
</ComboBox>
<Button Name="btnUpdateBadgeWidthIcon" Content="以图标的方式更新 Application Badge" Click="btnUpdateBadgeWidthIcon_Click" Margin="5 0 0 0" />
</StackPanel> <Button Name="btnClearBadge" Content="清除 Application Badge" Click="btnClearBadge_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>
Notification/Badge/ApplicationBadge.xaml.cs
/*
* 本例用于演示 application 的 badge 通知
* application 的 badge 通知会显示在 application tile 上和 app 的任务栏的图标上
*
* BadgeNotification - Badge 通知
* Content - Badge 的内容,XmlDocument 类型的数据,只读,其需要在构造函数中指定
* ExpirationTime - Badge 通知的过期时间,超过这个时间就会清除这个 Badge(application tile 的 badge 会被清除,而 app 的任务栏的图标上 的 badge 不会被清除)
*
* BadgeUpdateManager - Badge 更新管理器
* CreateBadgeUpdaterForApplication() - 创建一个 Application 的 Badge 更新器,返回 BadgeUpdater 类型的数据
*
* BadgeUpdater - Badge 更新器
* Update() - 更新指定的 BadgeNotification
* Clear() - 清除 BadgeNotification
*
*
* 注:本例是通过 xml 来构造 badge 的,另外也可以通过 NuGet 的 Microsoft.Toolkit.Uwp.Notifications 来构造 badge(其用 c# 对 xml 做了封装)
*/ using System;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; namespace Windows10.Notification.Badge
{
public sealed partial class ApplicationBadge : Page
{
public ApplicationBadge()
{
this.InitializeComponent();
} // 以数字的方式更新 Application Badge 通知
private void btnUpdateBadgeWidthNumber_Click(object sender, RoutedEventArgs e)
{
// 用于描述 badge 通知的 xml 字符串(数字在 1 - 99 之间,如果大于 99 则会显示 99+ ,如果是 0 则会移除 badge,如果小于 0 则无效)
string badgeXml = "<badge value='6'/>"; // 将 xml 字符串转换为 Windows.Data.Xml.Dom.XmlDocument 对象
XmlDocument badgeDoc = new XmlDocument();
badgeDoc.LoadXml(badgeXml);
// 获取此 badge 的 xml
// lblMsg.Text = badgeXml.GetXml(); // 实例化 BadgeNotification 对象
BadgeNotification badgeNotification = new BadgeNotification(badgeDoc);
DateTimeOffset expirationTime = DateTimeOffset.UtcNow.AddSeconds();
badgeNotification.ExpirationTime = expirationTime; // 30 秒后清除这个 badge // 将指定的 BadgeNotification 对象更新到 application
BadgeUpdater badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForApplication();
badgeUpdater.Update(badgeNotification);
} // 以图标的方式更新 Application Badge 通知
private void btnUpdateBadgeWidthIcon_Click(object sender, RoutedEventArgs e)
{
// 用于描述 badge 通知的 xml 字符串
string badgeXml = $"<badge value='{((ComboBoxItem)cmbBadgeValue.SelectedItem).Content}'/>"; // 将 xml 字符串转换为 Windows.Data.Xml.Dom.XmlDocument 对象
XmlDocument badgeDoc = new XmlDocument();
badgeDoc.LoadXml(badgeXml);
// 获取此 badge 的 xml
// lblMsg.Text = badgeXml.GetXml(); // 实例化 BadgeNotification 对象
BadgeNotification badgeNotification = new BadgeNotification(badgeDoc);
DateTimeOffset expirationTime = DateTimeOffset.UtcNow.AddSeconds();
badgeNotification.ExpirationTime = expirationTime; // 30 秒后清除这个 badge // 将指定的 BadgeNotification 对象更新到 application
BadgeUpdater badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForApplication();
badgeUpdater.Update(badgeNotification);
} // 清除 Application Badge 通知
private void btnClearBadge_Click(object sender, RoutedEventArgs e)
{
BadgeUpdater badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForApplication();
badgeUpdater.Clear();
}
}
}
2、本例用于演示 secondary tile 的 badge 通知
Notification/Badge/SecondaryTileBadge.xaml
<Page
x:Class="Windows10.Notification.Badge.SecondaryTileBadge"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Notification.Badge"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnUpdateBadgeWidthNumber" Content="以数字的方式更新指定的 Secondary Tile 的 Badge" Click="btnUpdateBadgeWidthNumber_Click" Margin="5" /> <StackPanel Orientation="Horizontal" Margin="5">
<ComboBox Name="cmbBadgeValue">
<ComboBoxItem Content="activity" IsSelected="True" />
<ComboBoxItem Content="alarm" />
<ComboBoxItem Content="alert" />
<ComboBoxItem Content="attention" />
<ComboBoxItem Content="available" />
<ComboBoxItem Content="away" />
<ComboBoxItem Content="busy" />
<ComboBoxItem Content="error" />
<ComboBoxItem Content="newMessage" />
<ComboBoxItem Content="paused" />
<ComboBoxItem Content="playing" />
<ComboBoxItem Content="unavailable" />
</ComboBox>
<Button Name="btnUpdateBadgeWidthIcon" Content="以图标的方式更新指定的 Secondary Tile 的 Badge" Click="btnUpdateBadgeWidthIcon_Click" Margin="5 0 0 0" />
</StackPanel> <Button Name="btnClearBadge" Content="清除指定的 Secondary Tile 的 Badge" Click="btnClearBadge_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>
Notification/Badge/SecondaryTileBadge.xaml.cs
/*
* 本例用于演示 secondary tile 的 badge 通知
* secondary tile 的 badge 通知会显示在 secondary tile 上和 app 的任务栏的图标上
*
* BadgeNotification - Badge 通知
* Content - Badge 的内容,XmlDocument 类型的数据,只读,其需要在构造函数中指定
* ExpirationTime - Badge 通知的过期时间,超过这个时间就会清除这个 Badge
*
* BadgeUpdateManager - Badge 更新管理器
* CreateBadgeUpdaterForSecondaryTile(string tileId) - 为指定的 secondary tile 创建一个 Badge 更新器,返回 BadgeUpdater 类型的数据
*
* BadgeUpdater - Badge 更新器
* Update() - 更新指定的 BadgeNotification
* Clear() - 清除 BadgeNotification
*
*
* 注:本例是通过 xml 来构造 badge 的,另外也可以通过 NuGet 的 Microsoft.Toolkit.Uwp.Notifications 来构造 badge(其用 c# 对 xml 做了封装)
*/ using System;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using Windows.UI.StartScreen;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation; namespace Windows10.Notification.Badge
{
public sealed partial class SecondaryTileBadge : Page
{
private const string TILEID = "tile_badge"; public SecondaryTileBadge()
{
this.InitializeComponent();
} // 在开始屏幕固定一个 secondary tile 磁贴
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e); Uri square150x150Logo = new Uri("ms-appx:///Assets/Square150x150Logo.png");
Uri wide310x150Logo = new Uri("ms-appx:///Assets/Wide310x150Logo.png");
Uri square310x310Logo = new Uri("ms-appx:///Assets/Square310x310Logo.png");
SecondaryTile secondaryTile = new SecondaryTile(TILEID, "name", "arguments", square150x150Logo, TileSize.Wide310x150);
secondaryTile.VisualElements.Wide310x150Logo = wide310x150Logo;
secondaryTile.VisualElements.Square310x310Logo = square310x310Logo; try
{
bool isPinned = await secondaryTile.RequestCreateAsync();
lblMsg.Text = isPinned ? "固定成功" : "固定失败";
}
catch (Exception ex)
{
lblMsg.Text = "固定失败: " + ex.ToString();
}
} // 以数字的方式更新指定的 Secondary Tile 的 Badge 通知
private void btnUpdateBadgeWidthNumber_Click(object sender, RoutedEventArgs e)
{
// 用于描述 badge 通知的 xml 字符串(数字在 1 - 99 之间,如果大于 99 则会显示 99+ ,如果是 0 则会移除 badge,如果小于 0 则无效)
string badgeXml = "<badge value='6'/>"; // 将 xml 字符串转换为 Windows.Data.Xml.Dom.XmlDocument 对象
XmlDocument badgeDoc = new XmlDocument();
badgeDoc.LoadXml(badgeXml);
// 获取此 badge 的 xml
// lblMsg.Text = badgeXml.GetXml(); // 实例化 BadgeNotification 对象
BadgeNotification badgeNotification = new BadgeNotification(badgeDoc);
DateTimeOffset expirationTime = DateTimeOffset.UtcNow.AddSeconds();
badgeNotification.ExpirationTime = expirationTime; // 30 秒后清除这个 badge // 将指定的 BadgeNotification 对象更新到指定的 secondary tile 磁贴
BadgeUpdater badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(TILEID);
badgeUpdater.Update(badgeNotification);
} // 以图标的方式更新指定的 Secondary Tile 的 Badge 通知
private void btnUpdateBadgeWidthIcon_Click(object sender, RoutedEventArgs e)
{
// 用于描述 badge 通知的 xml 字符串
string badgeXml = $"<badge value='{((ComboBoxItem)cmbBadgeValue.SelectedItem).Content}'/>"; // 将 xml 字符串转换为 Windows.Data.Xml.Dom.XmlDocument 对象
XmlDocument badgeDoc = new XmlDocument();
badgeDoc.LoadXml(badgeXml);
// 获取此 badge 的 xml
// lblMsg.Text = badgeXml.GetXml(); // 实例化 BadgeNotification 对象
BadgeNotification badgeNotification = new BadgeNotification(badgeDoc);
DateTimeOffset expirationTime = DateTimeOffset.UtcNow.AddSeconds();
badgeNotification.ExpirationTime = expirationTime; // 30 秒后清除这个 badge // 将指定的 BadgeNotification 对象更新到指定的 secondary tile 磁贴
BadgeUpdater badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(TILEID);
badgeUpdater.Update(badgeNotification);
} // 清除指定的 Secondary Tile 的 Badge 通知
private void btnClearBadge_Click(object sender, RoutedEventArgs e)
{
BadgeUpdater badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(TILEID);
badgeUpdater.Clear();
}
}
}
3、演示如何轮询服务端以更新 badge 通知
Notification/Badge/Periodic.xaml
<Page
x:Class="Windows10.Notification.Badge.Periodic"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Windows10.Notification.Badge"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"> <Grid Background="Transparent">
<StackPanel Margin="10 0 10 10"> <TextBlock Name="lblMsg" Margin="5" /> <Button Name="btnStartPeriodicUpdate" Content="启动一个“轮询服务端以更新 badge 通知”的任务" Click="btnStartPeriodicUpdate_Click" Margin="5" /> </StackPanel>
</Grid>
</Page>
Notification/Badge/Periodic.xaml.cs
/*
* 演示如何轮询服务端以更新 badge 通知
*
* BadgeUpdater - Badge 更新器
* StartPeriodicUpdate(Uri badgeContent, PeriodicUpdateRecurrence requestedInterval) - 启动一个“轮询服务端以更新 badge 通知”的任务
* StartPeriodicUpdate(Uri badgeContent, DateTimeOffset startTime, PeriodicUpdateRecurrence requestedInterval) - 启动一个“轮询服务端以更新 badge 通知”的任务
* badgeContent - Badge 通知的内容(xml 格式数据)的 uri 地址(指定多个则会循环显示)
* startTime - 可以指定启动此任务的时间
* 指定此值时的逻辑为:首先会立刻请求服务端获取数据,然后在到达 startTime 指定的时间点后再次获取数据,最后再每次按 requestedInterval 指定的间隔轮询服务端
* requestedInterval - 轮询服务端的周期(PeriodicUpdateRecurrence 枚举)
* HalfHour, Hour, SixHours, TwelveHours, Daily
* StopPeriodicUpdate() - 停止“轮询服务端以更新 badge 通知”的任务
*
*
* 注:服务端代码请参见 WebApi/Controllers/BadgeContentController.cs(有指定 X-WNS-Expires 标头和 X-WNS-Tag 标头的示例)
*/ using System;
using Windows.UI.Notifications;
using Windows.UI.StartScreen;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation; namespace Windows10.Notification.Badge
{
public sealed partial class Periodic : Page
{
private const string TILEID = "tile_badge_periodic"; public Periodic()
{
this.InitializeComponent();
} // 在开始屏幕固定一个 secondary tile 磁贴
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e); Uri square150x150Logo = new Uri("ms-appx:///Assets/Square150x150Logo.png");
Uri wide310x150Logo = new Uri("ms-appx:///Assets/Wide310x150Logo.png");
Uri square310x310Logo = new Uri("ms-appx:///Assets/Square310x310Logo.png");
SecondaryTile secondaryTile = new SecondaryTile(TILEID, "name", "arguments", square150x150Logo, TileSize.Wide310x150);
secondaryTile.VisualElements.Wide310x150Logo = wide310x150Logo;
secondaryTile.VisualElements.Square310x310Logo = square310x310Logo; try
{
bool isPinned = await secondaryTile.RequestCreateAsync();
lblMsg.Text = isPinned ? "固定成功" : "固定失败";
}
catch (Exception ex)
{
lblMsg.Text = "固定失败: " + ex.ToString();
}
} // 启动一个“轮询服务端以更新 badge 通知”的任务
private void btnStartPeriodicUpdate_Click(object sender, RoutedEventArgs e)
{
// 启动一个循环更新 Badge 通知的任务,并指定 Badge 通知的数据源和轮询周期
BadgeUpdater badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(TILEID); // 马上请求服务端获取数据,然后 45 分钟之后再次获取数据,最后再每半个小时获取一次数据
badgeUpdater.StartPeriodicUpdate(new Uri("http://localhost:44914/api/BadgeContent", UriKind.Absolute), DateTimeOffset.UtcNow.AddMinutes(), PeriodicUpdateRecurrence.HalfHour); // Badge 通知的数据源示例请参见 WebApi/Controllers/BadgeContentController.cs
}
}
}
OK
[源码下载]
背水一战 Windows 10 (112) - 通知(Badge): application 的 badge 通知, secondary 的 badge 通知, 轮询服务端以更新 badge 通知的更多相关文章
- 背水一战 Windows 10 (109) - 通知(Tile): 按计划显示 tile 通知, 轮询服务端以更新 tile 通知
[源码下载] 背水一战 Windows 10 (109) - 通知(Tile): 按计划显示 tile 通知, 轮询服务端以更新 tile 通知 作者:webabcd 介绍背水一战 Windows 1 ...
- 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知)
[源码下载] 背水一战 Windows 10 (118) - 后台任务: 后台下载任务(任务分组,并行或串行执行,组完成后通知) 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 ...
- 背水一战 Windows 10 (113) - 锁屏: 将 Application 的 Badge 通知和 Tile 通知发送到锁屏, 将 secondary tile 的 Badge 通知和 Tile 通知发送到锁屏
[源码下载] 背水一战 Windows 10 (113) - 锁屏: 将 Application 的 Badge 通知和 Tile 通知发送到锁屏, 将 secondary tile 的 Badge ...
- 背水一战 Windows 10 (108) - 通知(Tile): application tile 基础, secondary tile 基础
[源码下载] 背水一战 Windows 10 (108) - 通知(Tile): application tile 基础, secondary tile 基础 作者:webabcd 介绍背水一战 Wi ...
- 背水一战 Windows 10 (121) - 后台任务: 推送通知
[源码下载] 背水一战 Windows 10 (121) - 后台任务: 推送通知 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 推送通知 示例演示如何接收推送通知/WebA ...
- 背水一战 Windows 10 (111) - 通知(Tile): secondary tile 模板之图片, secondary tile 模板之分组
[源码下载] 背水一战 Windows 10 (111) - 通知(Tile): secondary tile 模板之图片, secondary tile 模板之分组 作者:webabcd 介绍背水一 ...
- 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本
[源码下载] 背水一战 Windows 10 (110) - 通知(Tile): secondary tile 模板之基础, secondary tile 模板之文本 作者:webabcd 介绍背水一 ...
- 背水一战 Windows 10 (107) - 通知(Toast): 提示音, 特定场景
[源码下载] 背水一战 Windows 10 (107) - 通知(Toast): 提示音, 特定场景 作者:webabcd 介绍背水一战 Windows 10 之 通知(Toast) 提示音 特定场 ...
- 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒
[源码下载] 背水一战 Windows 10 (106) - 通知(Toast): 通过 toast 打开协议, 通过 toast 选择在指定的时间之后延迟提醒或者取消延迟提醒 作者:webabcd ...
随机推荐
- 洛谷 P1426小鱼会有危险吗
题目: 有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%.有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测器,探测器左右x米之内是探 ...
- 《剑指Offer》第20题(Java实现):定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
一.题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 二.思路解析 首先定义一个Integer类型的栈,记为stack,此栈用来完成数据 ...
- HTML导出Excel文件(兼容IE及所有浏览器)
注意:IE浏览器需要以下设置: 打开IE,在常用工具栏中选择“工具”--->Internet选项---->选择"安全"标签页--->选择"自定义级别&q ...
- ionic3问题记录
1.Ionic3 websocket 启动没问题,编译的时候报错 events.js:136thrower;// Unhandled 'error' event^Error: read ECONNRE ...
- python 字典 拼接SQL语句
def gen_sql(table_name, data): """ :param table_name: 表名称 :param data: 字典对象 key为字段(要 ...
- CSS网页布局
注:优化样式表:增加css样式表的可读性 减伤样式重复 一.主要内容 1.布局分类;131 121 2.display属性排版 3.float属性排版(横向多列布局) 4.防止父类盒子塌陷 二.标 ...
- 人脸检测(1)——HOG特征
一.概述 前面一个系列,我们对车牌识别的相关技术进行了研究,但是车牌识别相对来说还是比较简单的,后续本人会对人脸检测.人脸识别,人脸姿态估计和人眼识别做一定的学习和研究.其中人脸检测相对来说比较简单, ...
- 解决ubuntu 图标消失问题(ubuntu 16)
如题,我的ubuntu 16 在安装了新内核并重启之后,所有的图标都消失了. (可能和新内核没有多大关系,我切回旧内核也那样) 是什么bug我不清楚,但是图标原有的位置还是可以点击的,仔细看图标还在, ...
- 通过该源码修改vim颜色和pudb调试器的代码颜色的方法
2019-02-19,18点20vim调整颜色vim ~/.vimrc 这个pudb的配色用上的方法改不了.调试状态时候按o和回车能切换console和调试界面. 成功了.通过修改pudb源代码来实现 ...
- 一年web网站测试总结
1. 页面链接检查 每一个链接是否都有对应的页面,并且页面之间切换正确.可以使用一些工具,如LinkBotPro.File-AIDCS.HTML Link Validater.Xenu等工具.Link ...