从4.3开始,Android有一个新的通知监听器服务:http://developer.android.com/about/versions/jelly-bean.html http://developer.android.com/reference/android/service/notification/NotificationListenerService.html
来自文档:
默认情况下禁用通知访问 - 应用程序可以使用新的Intent将用户直接带到Settings以在安装后启用侦听器服务。
我没有在任何地方看到发射的意图。仔细阅读“设置”文档似乎没有用处:http://developer.android.com/reference/android/provider/Settings.html
直接查看Settings类: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");
编辑:正如CommonsWare指出的那样正确地做到这一点:
Intent intent=new Intent("android.settings.NOTIFICATION_LISTENER_SETTINGS");
导致崩溃:
(android.content.ActivityNotFoundException:找不到处理Intent的Activity {act = android.settings.NOTIFICATION_LISTENER_SETTINGS})
我错过了什么吗?我不确定如何将用户发送到正确的设置屏幕以在我的应用程序中启用此服务。
我错过了什么吗?
好吧,在上一篇文章中,您将操作字符串与类名混淆。 “手动”方法是:
Intent intent=new Intent("android.settings.NOTIFICATION_LISTENER_SETTINGS");
就Android Studio没有找到Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS
的原因而言,我不能说。
UPDATE
根据评论中的讨论,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);
}
}