接下来,是根
据通知重要性,对其进行打分,分数在 -20到20 之间;
然后是对Notification的组装,然后对Notification的icon进行判断,若其不为零,便为有效通知,之后调用关键方法notifyPostedLocked():
到这里做了可见性的一些判断,就开始准备回调了,因为前面通知已经组装完毕准备显示到状态栏了,之后就需要将相关的通知消息告诉所有监听者。继续看到notifyPostedLocked()中调到的notifyPosted()方法:
这里INotificationListener的实现类是NotificationListenerService.Java;到这里就调到Listener的onNotificationPosted()方法;此方法是一个空的抽象方法;是由它的APP实例类来实现的。源码截图如下:
此方法,在BaseStatusBar类中实现,new NotificationListenerService() { ... 如下图:
};
时序图如下:
2.APP
清除(Cancel)通知
与\新增通知\类似的流程是\删除通知\,发起点在NotificationManager,之后经由NotificationManagerService处理和NotificationListenerService传递,最后到达各个继承自NotificationListenerService的子类中,只不过最后的处理方法变成了onNotificationRemoved。调用时序图下:
NotificationListenerService调用流程小结
简单来看,NotificationListenerService在系统通知的消息传递过程中,起到了代理的作用。继承自NotificationListenerService的类作为client端,真正的server端则是NotificationManagerService,由它负责整个Notification的控制与管理。NotificationManagerService将处理之后的结果通过NotificationListenerService返回给client端,最终各个client端(BaseStatusBar)通过onNotificationPosted()和onNotificationRemoved()方法拿到系统通知状态变更的相关信息。
一. 锁屏界面下拉通知如何实现 1. 线索点 A. 下拉、上拉时会触发NotificationPanelView.setNotifyStackExpansion B. 关闭屏幕时会触发PanelView.setExpandedHeightInternal