Android: обнаружение статуса "Не беспокоить"?

Мне просто интересно, есть ли способ проверить, находится ли Android-устройство (21 +) в режиме "Не беспокоить"? Я знаю, там AudioManager.RINGER_MODE_SILENT, но мне было интересно, относится ли это к этой ситуации или если есть лучший способ проверить?

Ответы

Ответ 1

С указателями из Android, как включить, не беспокоить (dnd) программно:

В SDK 23, android.app.NotificationManager предоставляет необходимый вам интерфейс, а именно NotificationManager.getCurrentInterruptionFilter().

Это может вернуть один из:

  • INTERRUPTION_FILTER_PRIORITY
  • INTERRUPTION_FILTER_ALARMS
  • INTERRUPTION_FILTER_NONE
  • INTERRUPTION_FILTER_ALL
  • INTERRUPTION_FILTER_UNKNOWN

Согласно Справка Google на устройствах Nexus Не беспокоить функцию Android >= 6.0, поэтому SDK 23 должен быть разумным спросить, Если это не так, я думаю, было бы разумно спросить, почему, чтобы иметь возможность обходного пути.

Ответ 2

Я приношу necro с этим сообщением, но просто искал решение той же проблемы и прошел мимо этого сообщения, как и я, поэтому оставляю решение для будущего ref.

Я не мог найти "официальный" способ сделать это, но нашел значение, которое может вернуть состояние DnD как целое. Эта функция называется "zen_mode" внутренне, поэтому вы можете проверить текущее значение с помощью следующего кода:

Global.getInt(getContentResolver(), "zen_mode")

Это вернет:

  • 0 - Если DnD выключен.
  • 1 - если DnD включен - приоритет
  • 2 - если включен DnD - Total Silence
  • 3 - Если включена функция DnD - Только сигналы тревоги

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

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

Я включил оба метода наблюдения и опроса для получения значения в this Gist. Надеюсь, это поможет/сэкономит кому-то еще некоторое время.

Обновление 15 марта 2017 года: Спасибо Дэвиду Рихе за комментарий. Добавлено состояние 1 - Priority Only для ответа, переработал Gist, чтобы распознать это состояние, и выводить неизвестные значения для входа в систему, если какие-либо другие устройства или будущие обновления решают вернуть другое значение.