Toast 通知在 Xamarin UWP Windows 应用程序中不起作用
Posted
技术标签:
【中文标题】Toast 通知在 Xamarin UWP Windows 应用程序中不起作用【英文标题】:Toast notification not working in Xamarin UWP Windows app 【发布时间】:2020-06-14 12:10:07 【问题描述】:我有在 Xamarin.forms 下开发的 UWP Windows 应用程序。我已经实现了 Toast 通知,但我遇到了这个问题。在某些 Windows 10 系统中,它可以正常工作并正确显示 toast 通知,但在某些 Windows 10 系统(即使具有相同的 Windows 10 操作系统更新)中,它无法正常工作。
下面是我在 Native UWP 中实现的第一个代码 sn-ps。
string msg = "Toast Notification Header";
string subMsg = "Toast Notification Title";
var toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
var toastTextElements = toastXml.GetElementsByTagName("text");
toastTextElements[0].AppendChild(toastXml.CreateTextNode(msg));
toastTextElements[1].AppendChild(toastXml.CreateTextNode(subMsg));
//To play the custom sound
var toastNode = toastXml.SelectSingleNode("/toast");
var audio = toastXml.CreateElement("audio");
audio.SetAttribute("src", "ms-appx:///Assets/incoming_message.wav");
audio.SetAttribute("loop", "false");
toastNode.AppendChild(audio);
var toast = new ToastNotification(toastXml);
ToastNotificationManager.CreateToastNotifier().Show(toast);
下面是我在 Native UWP 中实现的第二个代码 sn-ps。
// "With Microsoft.Toolkit.Uwp.Notifications"
// Construct the toast content
ToastContent toastContent = new ToastContent()
Visual = new ToastVisual()
BindingGeneric = new ToastBindingGeneric()
Children =
new AdaptiveText()
Text = "Toast Notification Header"
,
new AdaptiveText()
Text = "Toast Notification Content"
;
bool supportsCustomAudio = true;
// If we're running on Desktop before Version 1511, do NOT include custom audio
// since it was not supported until Version 1511, and would result in a silent toast.
if (AnalyticsInfo.VersionInfo.DeviceFamily.Equals("Windows.Desktop")
&& !ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 2))
supportsCustomAudio = false;
if (supportsCustomAudio)
toastContent.Audio = new ToastAudio()
Src = new Uri("ms-appx:///Assets/incoming_message.wav")
;
// And create the toast notification
ToastNotification notification = new ToastNotification(toastContent.GetXml());
// And then send the toast
ToastNotificationManager.CreateToastNotifier().Show(notification);
以上代码片段在某些 Windows 10 系统中显示 Toast 通知,但在某些其他 Windows 10 系统中不起作用。 请指导我。提前致谢。
问候, 维韦克
【问题讨论】:
您好,您的意思是有些系统不支持什么系统?在不正常弹出通知的设备上,可以在Settings
->System
->Notifications and Action
中查看是否开启了app的通知推送权限。
系统是指Windows 10系统,有的Windows 10系统显示通知,有的不显示,甚至是具有相同Windows更新版本的系统。我已经检查了通知权限,并且在所有系统中都启用了它。
对不起,我没说清楚,Windows 10有多个发布版本,你测试的是同一个系统吗?如果同一个版本有的可以推送通知,有的不能,那么这应该和代码无关,而与电脑的配置有关
我已经检查了多个具有最新且相同的 1909 版本的 Windows 10 的系统。在一个系统中它可以工作,而在另一个系统中,它不能工作。
抱歉,我无法重现此问题。或许我们可以通过测试找到问题的原因: 1、分别使用Xamarin.Forms
和Native UWP
创建通知,并在多个系统上测试。这是看问题是否与开发框架有关。 2.创建一个简单的通知(仅包含文本)进行测试,这是为了确认问题是否与通知的创建有关。 3、如果以上都不能提供明确的信息,那么可能是系统的原因(尝试在系统中开启开发者模式)
【参考方案1】:
请按照以下步骤在 UWP 项目中添加 toast 通知。
第 1 步:- 创建一个新的 UWP 项目。
第 2 步:- 转到代码隐藏并添加命名空间。
使用 Windows.UI.Notifications; 使用 NotificationsExtensions.Toasts;
第 3 步:- 我创建了一个 Toast 通用模板,如下代码:
public static Windows.Data.Xml.Dom.XmlDocument CreateToast()
var xDoc = new XDocument(
new XElement("toast",
new XElement("visual",
new XElement("binding", new XAttribute("template", "ToastGeneric"),
new XElement("text", "C# Corner"),
new XElement("text", "Do you got MVP award?")
)
),// actions
new XElement("actions",
new XElement("action", new XAttribute("activationType", "background"),
new XAttribute("content", "Yes"), new XAttribute("arguments", "yes")),
new XElement("action", new XAttribute("activationType", "background"),
new XAttribute("content", "No"), new XAttribute("arguments", "no"))
)
)
);
var xmlDoc = new Windows.Data.Xml.Dom.XmlDocument();
xmlDoc.LoadXml(xDoc.ToString());
return xmlDoc;
第 4 步:- 使用 XML 文档创建一个 toast 通知对象。
var xmdock = CreateToast();
var toast = new ToastNotification(xmdock);
Next show the toast using ToastNotificationManager class.
var notifi = Windows.UI.Notifications.ToastNotificationManager.CreateToastNotifier();
notifi.Show(toast);
第 5 步:- C# 代码隐藏:
private void showToastBtn_Click(object sender, RoutedEventArgs e)
var xmdock = CreateToast();
var toast = new ToastNotification(xmdock);
var notifi = Windows.UI.Notifications.ToastNotificationManager.CreateToastNotifier();
notifi.Show(toast);
希望以上代码对你有用。
谢谢
【讨论】:
以上是关于Toast 通知在 Xamarin UWP Windows 应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 UWP 应用检测由另一个应用触发的 Windows 10 Toast 通知