Получить источник уведомлений в Windows 10 uwp?

#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 .