Я создал приложение, которое воспроизводит звук, который не должен прерываться во время воспроизведения, потому что он предоставляет информацию о тайм-коде другим устройствам и не будет работать должным образом, когда устройство воспроизводит что-то другое (например, телефонный звонок).
Поэтому мне нужно решение для отключения уведомлений во время воспроизведения звука. Я выяснил пока:
При предварительной настройке разрешений и указании пользователю разрешить приложению включить режим "Не беспокоить" с помощью
startActivityForResult(new
Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS), 0);
Я могу активировать режим «Не беспокоить» (DND) через
NotificationManager.setInterruptionFilter(
NotificationManager.INTERRUPTION_FILTER_NONE)
но, который также отключит аудиопоток моего приложения. (см. 1)
блокировать телефонные звонки можно только тогда, когда у пользователя есть root-доступ. Я могу нет просить моих пользователей об этом, а также он не будет отключать другие уведомления
Я могу нет использовать режим полета, потому что приложению требуется Wi-Fi, чтобы запрашивать время через NTP из Интернета.
Вероятно, выход состоит в том, чтобы установить режим «Не беспокоить» вручную и затем запустить приложение и поток. Но как можно отправить пользователя прямо в меню «Не беспокоить», чтобы он мог включить режим «Не беспокоить» и вернуться в приложение, нажав кнопку «Назад»? Я нашел только Настройки-Действия:
ACTION_NOTIFICATION_LISTENER_SETTINGS
ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS
ACTION_SOUND_SETTINGS
которые не подходят для этого. Может, это предусмотрено как-то для открытия быстрых настроек режима "Не беспокоить"?
Итак, чтобы сократить его, мне нужно сделать:
Пользователь запускает аудио -> пользователя спрашивают, хочет ли он активировать dnd без прерывания воспроизведения аудио -> начнется воспроизведение звука -> пользователь прекращает звук -> режим "Не беспокоить" отключен
Заранее благодарим за идеи по этому поводу!
Вы в основном отключаете все звуки с помощью INTERRUPTION_FILTER_NONE
. Используйте INTERRUPTION_FILTER_PRIORITY
и настройте политику уведомлений, чтобы разрешить воспроизведение мультимедиа, как показано ниже:
NotificationManager.setInterruptionFilter(
NotificationManager.INTERRUPTION_FILTER_PRIORITY );
NotificationManager.setNotificationPolicy(
new NotificationManager.Policy( NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA,
0, 0 ) );
Вы также можете подавить некоторые эффекты, такие как освещение, добавив дополнительный параметр в setNotificationPolicy
- подробности см. В справке Android.
Вы спаситель, спасибо, что разместили это.
В Котлине это можно сделать как ..
notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val policy =
NotificationManager.Policy(Policy.PRIORITY_CATEGORY_MEDIA, 0, 0)
notificationManager.notificationPolicy = policy
}
ПРИМЕЧАНИЕ. Это возможно только в Android API уровня 28 и выше, поскольку в этот API была добавлена политика PRIORITY_CATEGORY_MEDIA.
Есть и другие категории политик, которые могут быть полезны в других случаях. как PRIORITY_CATEGORY_REMINDERS, PRIORITY_CATEGORY_EVENTS, PRIORITY_CATEGORY_MESSAGES, PRIORITY_CATEGORY_CALLS, PRIORITY_CATEGORY_REPEAT_CALLERS и т. д. Подробнее о них здесь NotificationManager.Policy Официальный документ
Неужели никто не имеет представления о проблеме?