Как отменить этот метод NotificationManager.Policy?

У меня есть способ включить будильник, когда в Android P включен режим «Не беспокоить». У меня есть кнопка переключения для включения будильника, и все работает нормально, но проблема в том, что я не знаю, какой метод использовать для отключения будильника. .

Это мой код:

    private void allowAlarms() {
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    assert notificationManager != null;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        notificationManager.setNotificationPolicy(
                new NotificationManager.Policy(NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS,
                        NotificationManager.Policy.PRIORITY_SENDERS_ANY,
                        NotificationManager.Policy.PRIORITY_SENDERS_ANY));
    }
    notificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY);
}

Я попытался отменить диспетчер уведомлений, но это не работает, и будильник все еще звонит.

notificationManager.cancel(0)

Я также попытался просто снова вызвать код Priority only, но это тоже не работает.

assert mNotificationManager != null;
                    mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_PRIORITY);

Я хочу, чтобы будильники снова блокировались по умолчанию в режиме «Только приоритет», когда я выключаю переключатель. Однако, что бы я ни пытался, будильник все еще звонит после того, как я его отключил. Любые идеи?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
308
2

Ответы 2

Вы можете сначала получить Политику, прежде чем изменять ее, с помощью NotificationManager.getNotificationPolicy() и установить ее на эту политику, когда закончите, вместе с NotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL).

Вы должны использовать что-то вроде этого:

 notificationManager.setNotificationPolicy(
            new NotificationManager.Policy(NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS | NotificationManager.Policy.PRIORITY_CATEGORY_CALLS | NotificationManager.Policy.PRIORITY_CATEGORY_MESSAGES,
                    NotificationManager.Policy.PRIORITY_SENDERS_ANY,
                    NotificationManager.Policy.PRIORITY_SENDERS_ANY));

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

Другие вопросы по теме