转载

Windows 10 UWP开发:如何弹出消息通知

在UWP的App中,弹出消息通知的方法和WinRT一致,注意是App内的消息通知(toast notification)而不是从服务器端推送的通知。主要有几个步骤:

1. 创建XML定义

// 1. create element ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01; XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);

这里面的消息模板有好几种:

// // Summary: //  指定要在消息通知中使用的模版。 [ContractVersion(typeof(UniversalApiContract), 65536)] public enum ToastTemplateType {  //  // Summary:  //  在三行文本中被包装的大型图像和单个字符串。  ToastImageAndText01 = 0,  //  // Summary:  //  大图像、加粗文本的一个字符串在第一行、常规文本的一个字符串包装在第二、三行中。  ToastImageAndText02 = 1,  //  // Summary:  //  大图像、加粗文本的一个字符串被包装在开头两行中、常规文本的一个字符串包装在第三行中。  ToastImageAndText03 = 2,  //  // Summary:  //  大图像、加粗文本的一个字符串在第一行、常规文本的一个字符串在第二行中、常规文本的一个字符串在第三行中。  ToastImageAndText04 = 3,  //  // Summary:  //  包装在三行文本中的单个字符串。  ToastText01 = 4,  //  // Summary:  //  第一行中加粗文本的一个字符串、覆盖第二行和第三行的常规文本的一个字符串。  ToastText02 = 5,  //  // Summary:  //  覆盖第一行和第二行的加粗文本的一个字符串。第三行中常规文本的一个字符串。  ToastText03 = 6,  //  // Summary:  //  第一行中加粗文本的一个字符串、第二行中常规文本的一个字符串、第三行中常规文本的一个字符串。  ToastText04 = 7 } 

我一般选第一种就够了。

2. 设置消息文本

// 2. provide text XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text"); toastTextElements[0].AppendChild(toastXml.CreateTextNode("消息内容"));

3. 设置消息框内的图标

// 3. provide image XmlNodeList toastImageAttributes = toastXml.GetElementsByTagName("image"); ((XmlElement)toastImageAttributes[0]).SetAttribute("src", $"ms-appx:///assets/图片文件名"); ((XmlElement)toastImageAttributes[0]).SetAttribute("alt", "logo");

图片我选了Assets目录下的图片,也就通常是应用的图标,当然你可以根据自己需要去改。

4. 消息停留时间

// 4. duration IXmlNode toastNode = toastXml.SelectSingleNode("/toast"); ((XmlElement)toastNode).SetAttribute("duration", "short");

short是短时间就消失,long是停留很长时间

5. 设置声音

// 5. audio XmlElement audio = toastXml.CreateElement("audio"); audio.SetAttribute("src", $"ms-winsoundevent:Notification.系统提示音名称"); toastNode.AppendChild(audio);

提示音有这几种:

Default, IM, Mail, Reminder, SMS, Looping.Alarm, Looping.Alarm2, Looping.Alarm3, Looping.Alarm4, Looping.Alarm5, Looping.Alarm6, Looping.Alarm7, Looping.Alarm8, Looping.Alarm9, Looping.Alarm10, Looping.Call, Looping.Call2, Looping.Call3, Looping.Call4, Looping.Call5, Looping.Call6, Looping.Call7, Looping.Call8, Looping.Call9, Looping.Call10,

6. 用户点击消息时导航到App的启动参数

如果你只是简单的弹出消息,不需要用户点击消息时根据内容执行特定操作的话,这步可以省略

6. app launch parameter ((XmlElement)toastNode).SetAttribute("launch", "{/"type/":/"toast/",/"param1/":/"12345/",/"param2/":/"67890/"}");

7. 弹出消息

// 7. send toast ToastNotification toast = new ToastNotification(toastXml); ToastNotificationManager.CreateToastNotifier().Show(toast);

效果是:

电脑:

Windows 10 UWP开发:如何弹出消息通知

Windows 10 UWP开发:如何弹出消息通知

手机:

Windows 10 UWP开发:如何弹出消息通知

Windows 10 UWP开发:如何弹出消息通知

为了使用方便,我封装成了一个方法:

public static void ShowToastNotification(string assetsImageFileName, string text, NotificationAudioNames audioName) {  // 1. create element  ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01;  XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);  // 2. provide text  XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");  toastTextElements[0].AppendChild(toastXml.CreateTextNode(text));  // 3. provide image  XmlNodeList toastImageAttributes = toastXml.GetElementsByTagName("image");  ((XmlElement)toastImageAttributes[0]).SetAttribute("src", $"ms-appx:///assets/{assetsImageFileName}");  ((XmlElement)toastImageAttributes[0]).SetAttribute("alt", "logo");  // 4. duration  IXmlNode toastNode = toastXml.SelectSingleNode("/toast");  ((XmlElement)toastNode).SetAttribute("duration", "short");  // 5. audio  XmlElement audio = toastXml.CreateElement("audio");  audio.SetAttribute("src", $"ms-winsoundevent:Notification.{audioName.ToString().Replace("_", ".")}");  toastNode.AppendChild(audio);  // 6. app launch parameter  //((XmlElement)toastNode).SetAttribute("launch", "{/"type/":/"toast/",/"param1/":/"12345/",/"param2/":/"67890/"}");  // 7. send toast  ToastNotification toast = new ToastNotification(toastXml);  ToastNotificationManager.CreateToastNotifier().Show(toast); } 
public enum NotificationAudioNames {  Default,  IM,  Mail,  Reminder,  SMS,  Looping_Alarm,  Looping_Alarm2,  Looping_Alarm3,  Looping_Alarm4,  Looping_Alarm5,  Looping_Alarm6,  Looping_Alarm7,  Looping_Alarm8,  Looping_Alarm9,  Looping_Alarm10,  Looping_Call,  Looping_Call2,  Looping_Call3,  Looping_Call4,  Looping_Call5,  Looping_Call6,  Looping_Call7,  Looping_Call8,  Looping_Call9,  Looping_Call10, } 

使用的时候一句话就OK了:

ShowToastNotification("Square150x150Logo.scale-200.png", $"已复制 {val}", NotificationAudioNames.Default);

注意,这里你定义的声音,在“通知和操作”里用户是可以自己改的。

正文到此结束
Loading...