应用程序是否有办法检查是否允许访问通知?

Jan*_*usz 14 android android-notifications

我想实现一个NotificationListenerService来访问发布到通知栏的所有通知.

我知道我需要通过此调用启用对设置中的通知的访问:

startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));
Run Code Online (Sandbox Code Playgroud)

有没有办法检查用户是否激活了我的应用程序的通知访问权限?

Ric*_*rdo 14

我设法找到一个轻微的黑客来解决这个问题.如果您检查源Settings.Secure,您将看到ENABLED_NOTIFICATION_LISTENERS带有注释的@hide.我不知道这是否是故意的.在一个相关的主题,CommonsWare确实在另一个答案中提到,有一个错误阻止启动此设置,所以我猜是无意的.

无论如何,要解决这个问题,我所做的就是使用字符串值获取当前启用的通知侦听器列表ENABLED_NOTIFICATION_LISTENERS:

String enabledListeners = Settings.Secure.getString(context.getContentResolver(), 
    "enabled_notification_listeners");
Run Code Online (Sandbox Code Playgroud)

然后,您只需检查您的服务是否在列表中.

我没有在所有API> = 18上测试这个,但它正在Android 4.4.2上运行.