使用NotificationListenerService检查对通知的访问

我使用> = 4.3 NotificationListenerService来访问通知。 在第一次启动时,我的应用程序将用户带到“访问通知”系统面板,但是我希望只要在“访问通知”中禁用我的应用程序的checkbox,就把用户带到那里。 我还没有find一个isNotificationAccessEnabled()方法,但我肯定知道这是可能的,因为像Krome这样的应用程序也是这样做的。

Solutions Collecting From Web of "使用NotificationListenerService检查对通知的访问"

Im开发者的Krome。 我做了什么来检查是否启用服务是添加公共静态variables在onBind方法中更改为true,并在解除绑定中为false。 这就是这个服务的工作原理。

编辑:

 public static boolean isNotificationAccessEnabled = false; @Override public void onListenerConnected() { isNotificationAccessEnabled = true; } @Override public void onListenerDisconnected() { isNotificationAccessEnabled = false; } 

编辑2016年6月15日

我不确定添加了哪个版本的支持库 ,但看起来现在已经内置了这个function。只需使用:

NotificationManagerCompat.getEnabledListenerPackages(context); ( 链接到文档 )

这会返回一个Set<String> ,你可以遍历它来查找你的包名。 但是请注意,我没有亲自testing过这个。 但它看起来像是可能更喜欢用这个来代替我以前的解决scheme。


旧解决scheme

此代码正在为我的应用程序工作:

 ContentResolver contentResolver = context.getContentResolver(); String enabledNotificationListeners = Settings.Secure.getString(contentResolver, "enabled_notification_listeners"); String packageName = context.getPackageName(); // check to see if the enabledNotificationListeners String contains our package name if (enabledNotificationListeners == null || !enabledNotificationListeners.contains(packageName)) { // in this situation we know that the user has not granted the app the Notification access permission throw new Exception(); } else { doSomethingThatRequiresNotificationAccessPermission(); } 

enabledNotificationListeners当零通知侦听器为零时, Stringnull ,因此为空检查。

我已经看到了enabledNotificationsListeners String典型值如下所示:

  • 用户没有给他们的任何应用程序通知访问权限
    • "" (空String
  • 用户已经给出了一个应用程序通知访问权限
    • "com.woodblockwithoutco.remotecontrollerexample/com.woodblockwithoutco.remotecontrollerexample.RemoteControlService"
  • 用户已经给出了两个应用程序通知访问权限
    • "com.scootrnova.android/com.scootrnova.android.ListenerService:com.woodblockwithoutco.remotecontrollerexample/com.woodblockwithoutco.remotecontrollerexample.RemoteControlService"

这个实现非常简单,效果很好:)

PS我有这个想法使用硬编码“enabled_notification_listeners”string从这个答案 。

只需使用:

 NotificationManagerCompat.from(context).areNotificationsEnabled() 

对我来说就像是一种魅力。