360卫士通知盒子和红包助手的实现原理(NotificationListenerService)
来源:互联网 发布:c语言deno 编辑:程序博客网 时间:2024/04/28 09:35
Google在Android 4.3 (API 18)中引入一个新类NotificationListenerService,它的功能很强大,当任何应用弹出通知的时候,它都可以接收到,并且当通知被移除的时候,它也可以接收到信息,很显然,我们可以通过这个类来对手机中的通知进行管理,360通知盒子和红包助手就是这样实现的,红包助手主要就是通过得到通知栏的通知来查看是否为红包的提示通知,如果是就提示红包来了。
现在大致说说用法吧!
1、创建一个类继承NotificationListenerService,实现它两个非常重要的方法onNotificationPosted和onNotificationRemoved,一个是当有通知到来的时候的回调,一个是通知被移除的时候的回调。
public class NLService extends NotificationListenerService {@Override public void onNotificationPosted(StatusBarNotification sbn) { } @Override public void onNotificationRemoved(StatusBarNotification sbn) { }}
当有通知到来的时候,onNotificationPosted就会调用,参数StatusBarNotification为状态栏通知的具体信息。
当状态栏通知被移除的时候,onNotificationRemoved就会调用,参数StatusBarNotification为状态栏通知的具体信息。
2、在AndroidManifest文件中安装下面声明这个Service
<service android:name="com.example.notificationservice.NLService" android:label="@string/app_name" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> <intent-filter> <action android:name="android.service.notification.NotificationListenerService" /> </intent-filter></service>
需要注意的是,必须带有BIND_NOTIFICATION_LISTENER_SERVICE权限和一个action为NotificationListenerService的Intent filter。
这样我们就基本可以实现通知的管理了,具体的通知管理自己可以根据需要去实现。
3、运行程序之后,进行权限开启
当我们运行程序之后,在“设置”-> “安全” -> “通知读取权限” 就会出现我们程序对应的通知读取开关,默认是关闭的,所以我们需要进行开启。
我们也可以使用代码检查该权限是否打开:
boolean isOpenNotificationReadPermission() { String notiStr = Settings.Secure.getString(getContentResolver(), "enabled_notification_listeners"); if (notiStr != null && !TextUtils.isEmpty(notiStr)) { final String[] names = notiStr.split(":"); for (int i = 0; i < names.length; i++) { ComponentName cn = ComponentName.unflattenFromString(names[i]); if (cn != null) { return getPackageName().equals(cn.getPackageName()); } } } return false;}
代码进入“通知读取权限”界面
if (!isOpenNotificationReadPermission()) { Intent intent = new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); cxt.startActivity(intent);}
4、下面我们来说说NotificationListenerService和StatusBarNotification里面有哪些有用的方法。
删除系统中可被清除的通知; final void cancelAllNotifications() final void cancelNotification(String pkg, String tag, int id) final void cancelNotification(String key) final void cancelNotifications(String[] keys) 得到当前通知栏显示的通知StatusBarNotification[] getActiveNotifications()StatusBarNotification[] getActiveNotifications(String[] keys) 开始监听回调onListenerConnected() 通知出现回调onNotificationPosted(StatusBarNotification sbn, NotificationListenerService.RankingMap rankingMap) onNotificationPosted(StatusBarNotification sbn) 通知移除回调onNotificationRemoved(StatusBarNotification sbn) onNotificationRemoved(StatusBarNotification sbn, NotificationListenerService.RankingMap rankingMap) 告诉notification manager指定的通知必须被用户看到final void setNotificationsShown(String[] keys)
(2)StatusBarNotification
返回通知对应的id;int getId() 返回通知对象;Notification getNotification() 返回通知对应的包名;String getPackageName() 返回通知发起的时间;long getPostTime() 返回通知的Tag,如果没有设置返回null;String getTag() boolean isClearable() 返回该通知是否可被清楚,FLAG_ONGOING_EVENT、FLAG_NO_CLEAR;boolean isOngoing() isOngoing():检查该通知的flag是否为FLAG_ONGOING_EVENT;
具体的Demo可以参考https://github.com/kpbird/NotificationListenerService-Example
- 360卫士通知盒子和红包助手的实现原理(NotificationListenerService)
- 通知使用权(NotificationListenerService)的使用
- Android中微信抢红包助手的实现
- Android中微信抢红包助手的实现
- 【Android】中微信抢红包助手的实现(代码整理)
- 红包助手
- Android NotificationListenerService原理简介
- 微信抢红包的原理
- Android中微信抢红包插件原理解析和开发实现
- Android中微信抢红包插件原理解析和开发实现
- Android中微信抢红包插件原理解析和开发实现
- Android中微信抢红包插件原理解析和开发实现
- Android中微信抢红包插件原理解析和开发实现
- Android中微信抢红包插件原理解析和开发实现
- Android中微信抢红包插件原理解析和开发实现
- Android中微信抢红包插件原理解析和开发实现
- 微信自动回复和自动抢红包实现原理(三):自动抢红包
- 微信自动回复和自动抢红包实现原理(三):自动抢红包
- 快速掌握AngularJs
- KMP算法求next数组和nextval数组
- 安装CocoaPods遇到的问题及解决办法
- 共享linux的ssh终端
- UIScrollView 用法详解
- 360卫士通知盒子和红包助手的实现原理(NotificationListenerService)
- 国内java报表软件简单对比
- 【正则表达式】不要写通配嵌套的正则表达式!
- Realm学习(二)
- 极大似然估计
- fragment getActivity()为空
- 做Java Web项目过程中遇到的几个问题及解决方案
- WebUploader插件上传大文件单文件和多文件JAVA版使用总结
- ActiveMQ消息队列主从配置