Доступ К Настройкам Android NotificationListenerService

Android имеет новую службу прослушивателя уведомлений с 4.3: http://developer.android.com/about/versions/jelly-bean.html http://developer.android.com/reference/android/service/notification/NotificationListenerService.html

документы:

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

Я не вижу намерения стрелять, задокументированного где-либо. Просмотр документа настроек не кажется полезным: http://developer.android.com/reference/android/provider/Settings.html

глядя на класс настроек напрямую: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/provider/Settings.java

Я вижу ACTION_NOTIFICATION_LISTENER_SETTINGS определены, но при использовании Android Studio и указывая на 4.3 ACTION_NOTIFICATION_LISTENER_SETTINGS не может быть решена:

Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);

попытка более вручную, похоже, не работает:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.settings", "android.settings.NOTIFICATION_LISTENER_SETTINGS");

edit: делать это правильно, Как указано ниже CommonsWare:

Intent intent=new Intent("android.settings.NOTIFICATION_LISTENER_SETTINGS");

приводит к краху:

(android.содержание.ActivityNotFoundException: активность не найдена обрабатывать намерение { act=android.настройки.NOTIFICATION_LISTENER_SETTINGS })

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

2 ответов


Я что-то пропустила?

Ну, в вашем последнем, вы объединяете строку действия с именем класса. "Ручной" подход будет:

Intent intent=new Intent("android.settings.NOTIFICATION_LISTENER_SETTINGS");

С точки зрения того, почему Android Studio не находит Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS, что я не могу сказать.


обновление

на основе обсуждения в комментариях, Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS в настоящее время нет в Android SDK (отмечено @hide). Кроме того, манифест для параметров приложение имеет немного другую версию строки действия:

Intent intent=new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");

дополнительно к CommonsWare ответ вот как проверить, если у вас есть это разрешение

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {        
    if (NotificationManagerCompat.getEnabledListenerPackages(this).contains(getPackageName())) {        //ask for permission
       Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS");
       startActivity(intent);
    }
}