#c# #uwp #notifications #windows-10
#c# #uwp #уведомления #windows-10
Вопрос:
Я пишу приложение uwp с прослушивателем уведомлений и пытаюсь получить источник уведомления (например, Google Chrome и веб-сайт, с которого оно пришло).
Я пытался использовать AppInfo.displayInfo для уведомления пользователя, но я не могу заставить его печатать информацию, и я не уверен, что это правильный способ сделать это.
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 «.
Комментарии:
1. Вы пробовали просматривать свой
UserNotification
объект через отладчик? Возможно, вы сможете просмотреть все его поля и посмотреть, какую информацию вы можете получить и где ее получить.2. Да, я сделал, и кажется, что единственная доступная информация — это приложение, из которого оно поступает (Google Chrome), а не веб-сайт. Что ж, я думаю, мне нужно найти обходной путь, если никто другой не знает, как и могу ли я получить веб-сайт, с которого оно поступает.
3. хм, у вас могут быть некоторые шансы с
Visual
свойством уведомления, которое содержит текст (в привязках) , который может предоставить вам информацию о веб-сайте.4. Не повезло, оно содержит только текст из уведомления (например, сообщение от и тестовые части) и никакой информации, откуда оно пришло.
5. Хорошая идея, но, похоже, вы можете получать push-уведомления, отправляемые только вашим собственным приложением или приложением из того же пакета. Хотя спасибо за помощь.
Ответ №1:
Надеюсь, вы уже нашли решение, но на случай, если это кому-нибудь поможет:
Уведомление не знает, что ваше сообщение приходит из браузера. Вся система уведомлений Windows не учитывает это. Windows получает уведомление пользователя от приложения, которым в вашем случае является браузер. Итак, вашим «источником» является приложение «Google Chrome». Лучше всего попытаться получить ссылку изнутри самого уведомления, если оно находится где-то внутри тела.
Я действительно думаю, что вы должны быть в состоянии найти ссылку внутри текста уведомления, но мне нужно больше информации о том, что именно вы получаете, чтобы быть уверенным. Если вы хотите знать, как прочитать текст уведомления, выполните:
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://learn.microsoft.com/en-us/windows/uwp/design/shell/tiles-and-notifications/notification-listener .