Доступ К Настройкам 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);
}
}