Как найти, какие приложения разрешены в разделе «Приоритетные уведомления приложений» в настройках «Не беспокоить»?

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

Введите описание изображения здесь

До сих пор я использую следующий код, чтобы проверить, установлен ли телефон в режиме «Не беспокоить» или нет:

public static boolean isDnDModeEnabled(Context context) { if(Build.VERSION.SDK_INT <23) return false; try { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); int filterValue = notificationManager.getCurrentInterruptionFilter(); switch(filterValue) { case NotificationManager.INTERRUPTION_FILTER_ALL : Log.d("DND","Interruption filter all"); break; case NotificationManager.INTERRUPTION_FILTER_ALARMS : Log.d("DND","Interruption filter alarms"); break; case NotificationManager.INTERRUPTION_FILTER_PRIORITY : Log.d("DND","Interruption filter priority"); break; case NotificationManager.INTERRUPTION_FILTER_UNKNOWN : Log.d("DND","Interruption filter unknown"); break; case NotificationManager.INTERRUPTION_FILTER_NONE : Log.d("DND","Interruption filter none"); break; } if(filterValue == NotificationManager.INTERRUPTION_FILTER_ALL) return false; else if(filterValue == NotificationManager.INTERRUPTION_FILTER_PRIORITY) { //Logic based on which apps are allowed as priority return true; //or false } else return true; } catch(Exception e) { return false; } } 

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

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

Solutions Collecting From Web of "Как найти, какие приложения разрешены в разделе «Приоритетные уведомления приложений» в настройках «Не беспокоить»?"

Вы ищете способ определить, какие приложения в системе имеют значение уведомления Notification.IMPORTANCE_MAX и, к сожалению, это невозможно для несистемного приложения. Вам нужен доступ к INotificationService чтобы вы могли вызвать getImportance(packageName) . См. Источник Notification Manager, но он защищен проверкой, которая гарантирует, что вы являетесь системным приложением или приложением, пакет которого вы передали, так что отражение отсутствует …

Google позволяет приложению получать собственное значение уведомления через NotificationManager с помощью getImportance() ( см. Документы ), но вы не можете вызвать его с помощью произвольного пакета.

Другой ответ здесь ссылается на проверку источника из приложения настроек системы, и это именно то, что я сделал, и через некоторое время отслеживая код, я обнаружил, как они определяют, какие приложения должны отображаться в меню «Переопределить не беспокоить» По этому коду, который привел меня по пути обнаружения того, как мы можем определить IMPORTANCE_*

Извините, но предложения, сделанные другим ответчиком, также не будут работать, потому что они либо неверны (у package.xml нет информации), либо потребует, чтобы root не был надежным на всех устройствах.

Вы можете попробовать следующее: некоторые из этих вещей могут потребовать доступа к привилегиям:

  1. Загрузите исходный код для приложения настроек и посмотрите, как настройки приложений получают список.
  2. Анализируйте packages.xml. Обычно там хранится информация о приложениях.
  3. Проверьте, сохранен ли список в settings.db