Подтвердить что ты не робот

Есть ли способ, которым приложение может проверить, разрешено ли ему получать уведомления?

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

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

startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));

Есть ли способ проверить, активировал ли пользователь доступ к уведомлению для моего приложения?

4b9b3361

Ответ 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()