Android: установите «не беспокоить» (setInterruptionFilter) для всех уведомлений, кроме аудиопотока приложений - PullRequest
0 голосов
/ 03 сентября 2018

Я создал приложение, которое воспроизводит звук, который не должен прерываться во время его воспроизведения, потому что он предоставляет информацию о временном коде другим устройствам и не будет работать должным образом, когда устройство воспроизводит что-то другое между ними (например, телефонный звонок).

Так что мне нужно решение для отключения уведомлений во время воспроизведения аудио. Я узнал до сих пор:

  • При настройке разрешений ранее и указании пользователю разрешить приложению включать DND с помощью

    startActivityForResult(new 
    Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS), 0);
    

    Я могу активировать режим «Не беспокоить» (DND) через

    NotificationManager.setInterruptionFilter(
        NotificationManager.INTERRUPTION_FILTER_NONE)
    

    но , который также отключит аудиопоток моего приложения. (см. 1 )

  • блокировать телефонные звонки возможно только тогда, когда у пользователя есть права root. Я могу не спросить у моих пользователей об этом, а также он не отключит другие уведомления

  • Я могу не использовать режим полета, потому что приложению требуется WiFi для запроса времени через NTP из Интернета.

Вероятно, решение состоит в том, чтобы установить DND-режим вручную и запустить приложение и поток после этого. Но как можно отправить пользователя прямо в DND-меню, чтобы он / она мог включить DND-режим и вернуться в приложение, нажав кнопку «Назад»? Я нашел только Настройки-Действия:

    ACTION_NOTIFICATION_LISTENER_SETTINGS
    ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS
    ACTION_SOUND_SETTINGS

, которые не подходят для этого. Может быть, предусмотрено как-то открыть быстрые настройки режима DND?

Итак, чтобы сократить это, что мне нужно сделать:

Пользователь запускает аудио -> пользователя спрашивают, хочет ли он активировать dnd без прерывания воспроизведения аудио -> воспроизведение аудио начато -> пользователь останавливает звук -> DND отключен

Заранее спасибо за идеи по этому поводу

1 Ответ

0 голосов
/ 03 августа 2019

Вы в основном отключаете все звуки с помощью 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.

...