在 Windows 10 uwp 中获取通知来源?

Posted

技术标签:

【中文标题】在 Windows 10 uwp 中获取通知来源?【英文标题】:Get notification origin in windows 10 uwp? 【发布时间】:2019-08-22 02:34:12 【问题描述】:

我正在编写一个带有通知侦听器的 uwp 应用程序,并且我正在尝试获取通知的来源(例如 Google Chrome 和它来自的网站)。

我尝试将 AppInfo.DisplayInfo 用于 UserNotification,但我无法让它打印信息,我不确定这是否是正确的方法。

IReadOnlyList<UserNotification> notifs = await MainPage.listener.GetNotificationsAsync(Windows.UI.Notifications.NotificationKinds.Toast);
UserNotification n = notifs.Last();
var name = n.AppInfo.DisplayInfo.DisplayName;

我希望 name 是通知来自的应用程序的名称,但它似乎是空的或只是不工作。从这样的通知中准确地说:

我想提取“Google Chrome”和/或“www.reddit.com”。

【问题讨论】:

您是否尝试通过调试器查看您的UserNotification 对象?您或许可以查看它的所有字段,了解您可以获取哪些信息以及从何处获取。 是的,我做到了,似乎唯一可用的信息是它来自(谷歌浏览器)的应用程序,而不是网站。好吧,我想如果没有其他人知道如何或者我是否可以获取它来自的网站,我必须找到一种解决方法。 嗯,您可能有机会使用通知的Visual 属性,contains the text (in bindings) 可能会为您提供有关网站的信息。 不走运,它只包含通知中的文本(如来自和测试部分的消息),没有来自哪里的信息。 好主意,但您似乎只能收到由您自己的应用程序或同一包中的应用程序发送的推送通知。不过感谢您的帮助。 【参考方案1】:

希望您现在已经找到了解决方案,但万一这对任何人都有帮助:

通知不知道您的消息来自浏览器。整个 Windows 通知系统都没有考虑到这一点。 Windows 从application 接收UserNotification,在您的情况下恰好是浏览器。所以你的“起源”是应用程序“谷歌浏览器”。最好的办法是尝试从notification 本身内部获取链接,如果它在体内某处的话。

我真的认为您应该能够在通知文本中找到链接,但我需要更多关于您收到的确切信息的信息才能确定。如果您想知道如何阅读通知文本,请执行以下操作:

string appName = notif.AppInfo.DisplayInfo.DisplayName; //this will get you "Google Chrome"
NotificationBinding toastBinding = notif.Notification.Visual.GetBinding(KnownNotificationBindings.ToastGeneric);
 
if (toastBinding != null)

    IReadOnlyList<AdaptiveNotificationText> textElements = toastBinding.GetTextElements();
    string titleText = textElements.FirstOrDefault()?.Text;
    string bodyText = string.Join("\n", textElements.Skip(1).Select(t => t.Text));
    string website = ParseWebsiteFromText(bodyText); //my guess is the info you want is in here

如果可用,您必须从那里解析所需的信息。

如果您想了解更多信息,我建议您从这里阅读文档:https://docs.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/notification-listener。

【讨论】:

以上是关于在 Windows 10 uwp 中获取通知来源?的主要内容,如果未能解决你的问题,请参考以下文章

UWP 应用程序在 Windows 10 中的查找结果的图标/磁贴的来源是啥?

Toast 通知在 Xamarin UWP Windows 应用程序中不起作用

WPF 桌面应用程序,Windows 10 通知 Toast 2016(UWP 社区工具包)

如何使用 UWP 应用检测由另一个应用触发的 Windows 10 Toast 通知

如何获取 Windows 通知服务?

在Windows 10 C#UWP通用Windows应用程序中获取UserName