Есть ли способ, которым приложение может проверить, разрешено ли ему получать уведомления?
Я хочу реализовать службу NotificationListenerService, чтобы получить доступ ко всем уведомлениям, которые отправляются на панель уведомлений.
Я понимаю, что мне нужно включить доступ к уведомлениям в настройках с помощью этого вызова:
startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
Есть ли способ проверить, активировал ли пользователь доступ к уведомлению для моего приложения?
Ответы
Ответ 1
Мне удалось найти небольшой взлом, чтобы решить эту проблему. Если вы проверите источник Settings.Secure
, вы увидите, что ENABLED_NOTIFICATION_LISTENERS
аннотируется с помощью @hide
. Я не знаю, намеренно это или нет. По соответствующей теме CommonsWare упоминает в еще один ответ, что есть ошибка предотвращая запуск этой настройки, поэтому я предполагаю, что это непреднамеренно.
Во всяком случае, чтобы обойти это, все, что я сделал, - это получить текущий список включенных прослушивателей уведомлений, используя строковое значение ENABLED_NOTIFICATION_LISTENERS
:
String enabledListeners = Settings.Secure.getString(context.getContentResolver(),
"enabled_notification_listeners");
Затем вам просто нужно проверить, находится ли ваша служба в списке.
Я не тестировал это на всех API >= 18, но он работает на Android 4.4.2.
Ответ 2
Вероятно, для API 19 (4.4) и выше.
Хотя я пробовал API 21 (5.0)
String enabledListeners = Settings.Secure.getString(context.getContentResolver(),
"enabled_notification_listeners");
"защищенный" поворачивал КРАСНЫЙ. Если вы хотите использовать его, вы должны использовать:
String enabledNotificationListeners =
android.provider.Settings.Secure.getString(context.getContentResolver(),
"enabled_notification_listeners");
Ответ 3
Try:
NotificationManagerCompat.from(context).areNotificationsEnabled()