快速构建Windows 8风格应用34-构建Toast通知

原文:快速构建Windows 8风格应用34-构建Toast通知

引言

开发过WindowsPhone应用或者使用过WindowsPhone手机的开发者都知道,我们会收到一些应用的提示信息,这些提示信息出现在手机的上端,并且停留几秒钟后会自动消失,当然如果我们点击弹出的信息会自动运行相应的应用程序,这种提示信息我们叫做通知。

其实Windows 8 Store 应用也借鉴了Windows Phone上的提示信息,我们开发人员可以使自己应用程序在合适时间弹出相关提示信息,那么这些Windows 8 Store应用的提示信息,我们叫做Toast通知。

并且Toast通知样式可以自定义的。例如:

一、Toast通知概述

Toast 通知是在屏幕右上角(对于从右到左 (Right-To-Left) 方向位于左上角)显示的通知。

  • Toast 通知可在应用上下文之外提供临时消息
  • 用 toast 通知可立即吸引用户注意
  • 用户可以永久关闭应用的 toast 通知
  • 能够快速导航到应用中上下文相关的位置
  • 很容易从应用本地或云端调用 toast 通知

Toast 通知使用与动态磁贴类似的模板架构体系,有丰富的展现形式可以选择。

更多关于Toast 通知概述可以参考:Toast 通知概述(Windows 应用商店应用) (Windows)

二、Toast通知构建

1,声明Toast通知功能

打开Package.appxmanifest应用清单文件,“应用程序UI”选项卡中找到“支持Toast通知”设置为“是”。

2,声明 Toast 通知背景色和文本颜色

我们可以为 Toast 通知设置背景颜色和浅色或深色文本。注意:该设置同时适用Toast 和磁贴通知背景以及文本颜色。

3,指定小徽标图像

应用的小徽标图像显示在每个 Toast 通知的右下角,让用户识别引发通知的应用。

4,添加命名空间声明

   1:  using Windows.UI.Notifications;
   2:  using Windows.Data.Xml.Dom;

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }5,为 Toast 选取一个模板并检索其 XML 内容

我们从系统提供的模板目录中选择一个适合的模板(详细的模板列表可参考 ToastTemplateType 枚举)。

注意:我们发送的每个单独的通知都可以使用不同的模板。

   1:  ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01; 
   2:  XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);

这里我使用的是ToastImageAndText01 模板,该模版样式如下:

6,为通知提供文本内容

我们可以首先检索模板中标记名称为“text”的所有元素。

ToastImageAndText01 模板只包含一个代码分配的文本字符串。该字符串最多可包含三行自动换行的字符串,因此我们应该相应地设置字符串的长度,以避免被截断。

   1:  XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
   2:   toastTextElements[0].AppendChild(toastXml.CreateTextNode("你好Windows 8!"));

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

7,为通知提供图像

我们可以首先检索模板中标记名称为“image”的所有元素。

与磁贴不同,Toast 模板(如 ToastImageAndText01)最多包含一个图像。

注意:并非所有 Toast 模板都包含图像,某些磁贴模板是仅文本的。

   1:  XmlNodeList toastImageAttributes = toastXml.GetElementsByTagName("image");

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

然后我们可以从应用的程序包、本地存储或从 Web 使用图像。注意:该图像大小小于 200 KB,小于 1024 x 1024 像素。

这里我以应用程序包的图像为例:

   1:  ((XmlElement)toastImageAttributes[0]).SetAttribute("src", "ms-appx:///Assets/SmallLogo.png");
   2:  ((XmlElement)toastImageAttributes[0]).SetAttribute("alt", "red graphic");

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

8,指定Toast 持续时间或者Toast 音频(非必要)

我们可以为Toast设置持续时间(仅有两个值:short和long),通常当我们的通知属于约会或者会议提醒之类的时候才使用“long”值。

注意:Toast持续时间默认为“short”。

   1:  IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
   2:  ((XmlElement)toastNode).SetAttribute("duration", "long");

另外我们也可以设置Toast音频,默认情况下Windows在播放通知时会播放一个简短的声音。同时我们可以选择使用系统提供的声音,也可以不使用任何声音。

由于模板中不包含 audio 元素,因此我们必须定义该元素,同时使用“ms-winsoundevent:”前缀指定声音文件。

   1:  IXmlNode toastNode = toastXml.SelectSingleNode("/toast");                        
   2:  XmlElement audio = toastXml.CreateElement("audio");

指定非默认声音。

   1:  audio.SetAttribute("src", "ms-winsoundevent:Notification.IM");

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

定义 audio 元素之后,需要将其附加到 Toast 的 XML 负载中,作为 toast 元素的子元素。

   1:  toastNode.AppendChild(audio);

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

9,指定应用的启动参数

通常用户点击 Toast 通知时,相关应用应当会启动,并显示与该通知的内容相关的视图。

我们可以使用 Toast 元素的 launch 属性来实现该效果。

该属性提供一个在通过 Toast 启动应用时,从 Toast 传递到应用的字符串。此字符串没有任何特定形式,它由我们应用来定义。

我们的应用在每次被激活时必须检查作为参数形式的此字符串,并相应地调整它的视图或操作。例如:

   1:  ((XmlElement)toastNode).SetAttribute("launch", "{\"type\":\"toast\",\"param1\":\"12345\",\"param2\":\"67890\"}");

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

10,创建 Toast 通知并发送

   1:  ToastNotification toast = new ToastNotification(toastXml);
   2:  ToastNotificationManager.CreateToastNotifier().Show(toast);

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

最后运行效果可如下:

点击按钮后弹出Toast通知:

 

更多关于Toast通知资料可参考:

1,发送 Toast 通知(使用 C#/VB/C++ 和 XAML 的 Windows 应用商店应用) (Windows)

2,Toast notifications sample

时间: 2024-08-28 08:10:08

快速构建Windows 8风格应用34-构建Toast通知的相关文章

快速构建Windows 8风格应用13-SearchContract构建

原文:快速构建Windows 8风格应用13-SearchContract构建 本篇博文主要介绍如何在应用中构建SearchContract,相应的原理已经在博文<快速构建Windows 8风格应用12-SearchContract概述及原理>中阐述清楚. 如何在应用中构建SearchContract 这里以常见的构建Search Contract功能为例,具体如下: 设置应用Search权限: 我们在应用中构建SearchContract之前,需要确认应用程序具有相应的Search能力,可以

快速构建Windows 8风格应用15-ShareContract构建

原文:快速构建Windows 8风格应用15-ShareContract构建 本篇博文主要介绍共享数据包.如何构建共享源.如何构建共享目标.DataTransferManager类. 共享数据包 DataPackage(数据包)是共享数据标准. 共享数据格式可以是多种的,包括文本.URI.HTML.图像等,以及更多可扩展的格式. 我们可以通过以下方法设置需要的分享数据类型: 1)  SetText():设置共享文本,例如: 可以实现效果: 2)  SetUri():设置共享Uri; 3)  Se

快速构建Windows 8风格应用32-构建辅助磁贴

原文:快速构建Windows 8风格应用32-构建辅助磁贴 引言 Windows Phone中,我们开发者可能会开发的一个功能点是将数据列表中某一项"Pin To Start(固定到开始屏幕)",大家都知道这种固定到开始屏幕的磁贴叫做辅助磁贴(也叫二级磁贴),用户可以通过该辅助磁贴启动应用程序并导航到应用程序中某一个页面或某一位置. 其实Windows 8 Store风格应用程序也引入了辅助磁贴的概念,用户在使用Windows 8 Store应用的辅助磁贴和Windows Phone

快速构建Windows 8风格应用35-触控输入

原文:快速构建Windows 8风格应用35-触控输入 引用 Windows 8设备通常具有多点触摸屏,用户可以同时使用多个手指来进行不同的输入交互,如点击.拖动或收缩等手势操作.另外Windows 8中将触摸.鼠标和笔/触笔交互是作为指针输入进行接收.处理和管理. 一.手势处理 首先我们来汇总一下Windows 8中常用的手势都有哪些. 1,点击:用一个手指触摸屏幕,然后抬起手指. 2,长按:用一个手指触摸屏幕并保持不动. 3,滑动:用一个或多个手指触摸屏幕并向着同一方向移动. 4,轻扫:用一

快速构建Windows 8风格应用22-MessageDialog

原文:快速构建Windows 8风格应用22-MessageDialog 本篇博文主要介绍MessageDialog概述.MessageDialog常用属性和方法.如何构建MessageDialog   MessageDialog概述 MessageDialog指的就是对话框. 对话框的命令栏中最多包含三个命令.如果我们指定任何命令,将会有一个默认命令添加到对话框中,目的是关闭对话框. 对话框弹出后界面中所有元素将在对话框下面显示,并且将会阻塞任何触摸事件直到用户进行响应对话框. 另外对话框应该

快速构建Windows 8风格应用36-商店应用发布流程

原文:快速构建Windows 8风格应用36-商店应用发布流程 引言 在发布应用之前,我们需要注册开发者账号才能够发布应用.我们可以登录https://appdev.microsoft.com/StorePortals/ 该网址进行注册开发者账号,同时我们也可以点击这里来浏览MSDN给到的开发者账号注册的详细步骤.那么注册完成开发者账号后,如何发布Windows Store 应用程序呢? Windows Store App 发布流程 1,使用Visual Studio 2012打开要上传的应用,

快速构建Windows 8风格应用23-App Bar概述及使用规范

原文:快速构建Windows 8风格应用23-App Bar概述及使用规范 本篇博文主要介绍App Bar概述.App Bar命令组织步骤.App Bar最佳实践.   App Bar概述 Windows 8 Store应用中的App Bar(应用程序工具栏)起到的作用和Windows Phone中AppBar一样.我们可以向用户提供各种操作接口,实现导航或者触发命令等. AppBar一般默认是隐藏的,也可以设置为始终可见.我们可以通过清扫屏幕上边缘或下边缘时显示AppBar,AppBar被点击

快速构建Windows 8风格应用26-本地应用数据

原文:快速构建Windows 8风格应用26-本地应用数据 本篇博文主要介绍如何获取应用的设置和文件容器.如何将数据写入设置.如何从设置中获取数据.如何删除设置中数据.如何将数据写入文件.如何从文件中获取数据. 当应用安装时,系统会为设置和文件等应用数据提供它自己的每用户数据存储.我们不需要知道这些数据存在哪里或如何存储,因为系统会负责管理物理存储工作.我们只需使用应用数据API就可以了. 本地应用数据一般用于当前设备数据的持久化,并且本地数据没有限制大小,通常情况使用本地数据存储大型数据集.

快速构建Windows 8风格应用2-创建调试应用

原文:快速构建Windows 8风格应用2-创建调试应用 本篇博文主要介绍的是创建应用时可以选择哪些模版,生成默认的Windows 8风格应用解决方案中含哪些文件,最后是如何调试Windows 8风格应用. 我们如何使用Visual Studio 2012创建Windows 8风格应用呢?可归结为以下几步: 1.选择我们要使用的开发语言,例如:JavaScript.C++.C#.Visual Basic. 2.选择项目模版,可以选择以下常用的项目模版: 1)拆分应用(Split App)模版 可