Google在Android 4.3 (API 18)中引入一个新类NotificationListenerService,它的功能很强大,当任何应用弹出通知的时候,它都可以接收到,并且当通知被移除的时候,它也可以接收到信息,很显然,我们可以通过这个类来对手机中的通知进行管理,360通知盒子和红包助手就是这样实现的,红包助手主要就是通过得到通知栏的通知来查看是否为红包的提示通知,如果是就提示红包来了。

现在大致说说用法吧!

1、创建一个类继承NotificationListenerService,实现它两个非常重要的方法onNotificationPosted和onNotificationRemoved,一个是当有通知到来的时候的回调,一个是通知被移除的时候的回调。

public class NLService extends NotificationListenerService {@Overridepublic void onNotificationPosted(StatusBarNotification sbn) {}@Overridepublic 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

欢迎关注微信公众号:DroidMind
精品内容独家发布平台


呈现与博客不一样的技术干货

360卫士通知盒子和红包助手的实现原理(NotificationListenerService)相关推荐

  1. 360怎么看电脑配置_Win10系统自带杀毒和垃圾清理好么?需不需要安装360卫士

    文/二蛋 Win10系统自带杀毒软件和垃圾清理好用么?需不需要安装360卫士? 手机系统有安卓和苹果之分,但是电脑系统可能大部分人用的都是微软系统,当然除了个别专业人士用苹果电脑除外哈. 那我们也知道 ...

  2. autojs微信红包助手代码,供大家参考

    // vx版本8.0.23(其他版本也可尝试),测试手机为红米note10 pro,autojsPro版本8.8.22-common // 本代码只用于学习交流,严禁用于违法违规途径,后果自负 //前 ...

  3. 联想m9870T微型计算机,联想Z5s如何指纹解锁拆微信红包 Lenovo Z5s如何使用红包助手...

    联想Z5s如何刷指纹快速拆红包?联想Z5s如何开启指纹解锁?联想Z5s红包助手如何使用?联想Z5s是性价比非常高的一款手机,在拼多多上还有补贴,价格实惠.新年抢红包,手快不够,还得手机也快.联想Z5s ...

  4. 瑞星杀毒软件、奇虎360杀毒软件、360卫士、百度卫士联手,搞不定弹出广告 amp; 恶意广告图标...

    一位网友说他的电脑近期出了问题:开机后桌面和任务栏上的高速启动栏会出现恶意图标.删除了下次开机又会出现:使用电脑过程中每分钟都会弹出广告.他为电脑安装了瑞星杀毒软件.奇虎360杀毒软件.360卫士.百 ...

  5. 瑞星杀毒软件、奇虎360杀毒软件、360卫士、百度卫士联手,搞不定弹出广告 恶意广告图标

    一位网友说他的电脑最近出了问题:开机后桌面和任务栏上的快速启动栏会出现恶意图标,删除了下次开机又会出现:使用电脑过程中每分钟都会弹出广告.他为电脑安装了瑞星杀毒软件.奇虎360杀毒软件.360卫士.百 ...

  6. 易语言 过360卫士杀毒五引擎误报(2016.7.11)

    点击阅读原文 推荐使用EIDE助手内的优化编译出来的程序 360卫士比较厉害的就是自创云查杀引擎.自称不用更新病毒库,就算新病毒也能几分钟具备查杀能力. 觉得说白了其实就是白名单系统,只要你的软件,不 ...

  7. Atitit 通过调用gui接口杀掉360杀毒 360卫士  qq保镖等难以结束的进程(javac# php )...

    Atitit 通过调用gui接口杀掉360杀毒 360卫士  qq保镖等难以结束的进程(javac# php ) 1.1. 这些流氓软件使用操作系统os提供的普通api根本就杀不掉啊1 1.2. 使用 ...

  8. 360卫士锁定IE主页之更换主页

    360卫士把主页改成 about:blank,空白页. 想换成www.hao123.com,简单办法,退出360卫士(图标右键退出),改好主页后,再启动360卫士,它又将hao123锁定了. 在系统修 ...

  9. 这年头居然还有用360卫士清理垃圾的?那玩意就是最大的...Python自动清理不香吗?

    前言 我不知道各位有没有这样的一种体验,就是下载一个360卫士,然后会连带的下载一堆应用文件,什么360浏览器啊各种!而且卸载起来都不好卸载,巨麻烦,所以这年头谁还用他来守护咱们的电脑啊!网友直言:3 ...

最新文章

  1. 从Developer Removed From Sale 回到可下载状态的方法
  2. language mysql_MySql 语言的分类;
  3. php解析doc试卷,PHP试题(卷)带答案解析.doc
  4. stata F值缺失_stata面板数据回归操作之GMM
  5. 安装配置树莓派的最佳工具——NOOBS
  6. 一文带你从零认识什么是XLA
  7. android 上传nexus_android发布到nexus私服
  8. (三)Java中的HashMap与HashTable的区别
  9. java mysql dump_mysql dump备份和恢复
  10. php删除英文链接词,英语写作词汇大全:转折连接词
  11. 阿里云张建锋:云网端深度融合的技术体系正在形成
  12. Ubuntu16.04安装WPS(个人记录)
  13. dspic c语言教程,轻松学PIC之数码管篇 PIC单片机学习系列教程
  14. 国际电离层参考模型程序说明
  15. 邮箱前台html,WEB独特的邮箱
  16. uni-app 评论五星
  17. 计算机excel柱状图刻度单位,如何设置excel图表的坐标刻度和单位-excel 柱状图 坐标 区间刻度...
  18. 泪目了!原河南常务副省长的艰辛求学路竟然这么感人
  19. 打包时出现No matching provisioning profile found错误的解决方法
  20. 【Kotlin学习之旅】使用Kotlin实现常见的对称加密、非对称加密、消息摘要、数字签名的demo

热门文章

  1. Linux服务器在线测速
  2. CPU性能测试基准(EEMBC-CoreMark)
  3. 积分风控体系建设包含的四个内容
  4. bootstrap-table固定表的高度
  5. 维基解密曝光CIA新路由器网络攻击方式
  6. 未来-量子计算机:量子计算机
  7. USB设备未被识别为HID,而是libusb-win32-device BETTER_USB_HS
  8. linux飞信机器人,安装fetion飞信机器人
  9. Android破解锁屏密码(已root)
  10. Google Earth Engine(GEE)——Landsat 8TI/TOA/SR影像对比分析区别和去云即NDVI计算