Android NotificationListenerService的使用
2018-01-15 14:40
567 查看
今天有个项目要使用到监听来电 信息 QQ 微信 等等的通知,所以写个demo。同时也给自己当一个备忘。
Android 4.3 及以上(API >= 18)使用
3,监测通知监听服务有没有授权,没有授权就打开监听设置页面:
完成这三步之后就可以监听到通知了。但还有个坑,APP杀死后再次进入监听不到了。经过度娘后发现这个监听不到的坑的问题是因为
利用回答中的解决方法,把应用的NotificationListenerService实现类disable再enable,即可触发系统rebind操作:
好了,就写到这里。第一次写博客,排版啥的没搞好,希望能坚持下去。
源码下载
一、理解
NotificationListenerService是通过系统调起的服务,在应用发起通知时,系统会将通知的应用,动作和信息回调给NotificationListenerService。二、使用
在 Android 4.3 以下(API < 18)使用AccessibilityService来读取新通知,在
Android 4.3 及以上(API >= 18)使用
NotificationListenerService来满足需求。
1,首先创建一个Class 继承自 NotificationListenerService并重写其中两个方法onNotificationPosted和onNotificationRemoved:
public class NotificationCollectorService extends NotificationListenerService{ //来通知时的调用 @Override public void onNotificationPosted(StatusBarNotification sbn) { super.onNotificationPosted(sbn); } //删除通知时的调用 @Override public void onNotificationRemoved(StatusBarNotification sbn) { super.onNotificationRemoved(sbn); } }
2,需要在在AndroidManifest.xml中注册Service并声明相关权限:
<service android:name=".NotificationCollectorService"android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> <intent-filter> <action android:name="android.service.notification.NotificationListenerService" /> </intent-filter> </service>
3,监测通知监听服务有没有授权,没有授权就打开监听设置页面:
//检测通知监听服务是否被授权 public boolean isNotificationListenerEnabled(Context context) { Set<String> packageNames = NotificationManagerCompat.getEnabledListenerPackages(this); if (packageNames.contains(context.getPackageName())) { return true; } return false; } //打开通知监听设置页面 public void openNotificationListenSettings() { try { Intent intent; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP_MR1) { intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS); } else { intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); } startActivity(intent); } catch (Exception e) { e.printStackTrace(); } }
完成这三步之后就可以监听到通知了。但还有个坑,APP杀死后再次进入监听不到了。经过度娘后发现这个监听不到的坑的问题是因为
NotificationListenerService被杀后再次启动时,并没有去
bindService,所以导致监听效果无效。
利用回答中的解决方法,把应用的NotificationListenerService实现类disable再enable,即可触发系统rebind操作:
private void toggleNotificationListenerService() { PackageManager pm = getPackageManager(); pm.setComponentEnabledSetting( new ComponentName(this, com.tang.monitor.monitor.NotificationCollectorService.class), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); pm.setComponentEnabledSetting( new ComponentName(this, com.tang.monitor.monitor.NotificationCollectorService.class), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP); }
好了,就写到这里。第一次写博客,排版啥的没搞好,希望能坚持下去。
源码下载
相关文章推荐
- Android 通过系统使用NotificationListenerService 监听各种Notification的用法
- Android 通过系统使用NotificationListenerService 监听各种Notification的使用方法
- Android 通过系统使用NotificationListenerService 监听各种Notification的使用方法
- android使用NotificationListenerService监听通知栏消息
- Android使用NotificationListenerService获取通知相关信息
- Android 通知使用权(NotificationListenerService)的使用
- Android 通过系统使用NotificationListenerService 监听各种Notification的使用方法
- Android之使用NotificationListenerService使得自己的应用不被杀及其源码分析
- [Android Pro] Android 4.3 NotificationListenerService使用详解
- Android 4.4 KitKat NotificationManagerService使用详解与原理分析(二)__原理分析
- Android 4.4 KitKat NotificationManagerService使用具体解释与原理分析(一)__使用具体解释
- Android 4.4 KitKat NotificationManagerService使用详解与原理分析(一)__使用详解
- 【笔记】Android NotificationListenerService监听短信、来电、微信、QQ等通知消息
- Android 4.4 KitKat NotificationManagerService使用详解与原理分析(二)__原理分析
- Android 4.4 KitKat NotificationManagerService使用详解与原理分析(一)__使用详解
- Android 4.4 KitKat NotificationManagerService使用详解与原理分析(二)__原理分析
- Android 4.4 KitKat NotificationManagerService使用详解与原理分析(一)
- 使用NotificationListenerService监听通知栏消息
- Android 4.4 NotificationManagerService使用详解与原理分析(二)__原理分析
- Android 4.4 KitKat NotificationManagerService使用详解与原理分析(一)__使用详解