#c# #windows #visual-studio #uwp #toast
Вопрос:
Поэтому я пытаюсь создать приложение UWP, которое должно определять, отображаются ли в данный момент какие-либо уведомления о тостах, а затем, когда это произойдет, воспроизводить аудиофайл. Я пытаюсь использовать метод GetNotificationsAsync для достижения этой цели, но проблема в том, что список, созданный этим методом, всегда один и тот же, независимо от того, отображается ли в данный момент уведомление о тосте или нет. Ниже приведен фрагмент кода внутри кнопки, который запустит процесс, нужно ли выполнить какой-то дополнительный шаг? Также приложению было предоставлено разрешение на уведомления в Windows 10.
private async void Button_Click(object sender, RoutedEventArgs e)
{
int a = 0;
switchStatus = "ON";
this.Status.Text = switchStatus;
while (a == 0)
{
// Get the listener
Windows.UI.Notifications.Management.UserNotificationListener listener = Windows.UI.Notifications.Management.UserNotificationListener.Current;
// And request access to the user's notifications (must be called from UI thread)
Windows.UI.Notifications.Management.UserNotificationListenerAccessStatus accessStatus = await listener.RequestAccessAsync();
switch (accessStatus)
{
// This means the user has granted access.
case Windows.UI.Notifications.Management.UserNotificationListenerAccessStatus.Allowed:
// Get the toast notifications
IReadOnlyList<Windows.UI.Notifications.UserNotification> notifs = await listener.GetNotificationsAsync(Windows.UI.Notifications.NotificationKinds.Toast);
int b = notifs.Count();
if (b==0)
{
break;
}
else
{
try
{
mediaPlayer.Source = Windows.Media.Core.MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/audio.mp3"));
mediaPlayer.AutoPlay = false;
mediaPlayer.Play();
playing = true;
a = 1;
}
catch (Exception)
{
}
}
break;
// This means the user has denied access.
// Any further calls to RequestAccessAsync will instantly
// return Denied. The user must go to the Windows settings
// and manually allow access.
case Windows.UI.Notifications.Management.UserNotificationListenerAccessStatus.Denied:
// Show UI explaining that listener features will not
// work until user allows access.
break;
// This means the user closed the prompt without
// selecting either allow or deny. Further calls to
// RequestAccessAsync will show the dialog again.
case Windows.UI.Notifications.Management.UserNotificationListenerAccessStatus.Unspecified:
// Show UI that allows the user to bring up the prompt again
break;
}
}
}
Комментарии:
1. Я попробовал ваш код на своей стороне, но результат показывает, что код работает хорошо. Я печатаю значение
b
в окне вывода, и я мог видеть, что значение меняется каждый раз, когда я нажимаю уведомление из Центра действий. Какое поведение заставляет вас чувствовать, что сгенерированный список всегда один и тот же?2. Это странно, для меня значение b всегда равно нулю. Есть ли какие-либо дополнительные шаги, которые мне нужно выполнить? Когда я говорю «дополнительные шаги», я имею в виду, что я просто установил Visual Studio 2019, выбрал шаблон UWP и набрал этот код. Есть ли что-нибудь еще, что я должен сделать, чтобы, возможно, код обнаружил уведомления?
3. Есть ли какие-либо другие уведомления в Центре действий на ваших тестовых устройствах? Он не всегда должен возвращать ноль при наличии уведомлений в Центре действий.
4. Так что, оказывается, код работал на другой машине. Похоже, проблема была в самом тестовом устройстве, так как оно разбилось два дня назад, и на нем пришлось переустановить Windows. Теперь код, похоже, работает.
Ответ №1:
Обновите информацию об этом выше. Код, по-видимому, работает правильно на другом устройстве. Тестовая машина, на которой был написан этот код, в конечном итоге вышла из строя, и Windows пришлось переустановить, после чего теперь работает тот же код. Так что, похоже, была какая-то проблема с самой установкой, а не с кодом.