最近为了在部门内做一次小型的技术分享,深入了解了一下Notification的实现原理,以及android的权限机制。在此做个记录,文章可能比较长,没耐心的话就直接看题纲吧。
先看一下下面两张图
图一:
看到这图可能大家不太明白,这和我们的notification有什么关系,我来简单介绍一下背景,这是发生在15年NBA季后赛期间,火箭队对阵小牛队,火箭队以3:1领先,只要再赢一场就能淘汰对手,这时候火箭队的官方首席运营官发了这条官方推特。翻译一下就是 “一把枪指着小牛的队标,哼哼,只需要闭上你们额眼睛,马上就要结束了”。这条推特当时引起了很多人的转发和评论,并且推送给了所有关注相关比赛的球迷以及媒体。我们试想一下,你是一个小牛的球迷,输了比赛以后本来心情就很差,这时候手机一震,收到这条通知栏推送,你是不是会有一种强烈的被蔑视感觉。当天推特上就掀起了一阵网络争议,不仅小牛球迷,其他中立球迷也表示这条推特讽刺意味十足,已经有侮辱对手的嫌疑了。当然了,通知栏表示我不背这个锅,谁来背?第二天,这位首席运营官就被火箭官方开除了,并宣称此推特仅代表前运营官个人意见与火箭队无任何关系。
图二:
说完别人,再来说说我们自己吧。3月5日那天,群里都在讨论这条推送,本意是我们的编辑打算推一个分手相关的歌单,但是文案考虑不周全,让人误解。导致很多用户感到莫名其妙,我们试想一下,你准备与你最近交往的对象一起吃个晚餐,出门前收到这条祝我们分手的通知,你是不是感到很不爽呢。是的,在微博上随手一搜就发现有很多用户是这种不爽的感觉了。当然了我拿这个对比并没有说要炒这位编辑的鱿鱼噢。
好像偏题很远了,说这么多其实就是想说明一件事,应用程序的通知是非常重要的一环,处理的不好很可能给用户带来不好的印象,轻则吐槽,重则直接卸载。
好了好了,言归正传,我先列一下题纲吧
一、Notification的使用
二、Notification跨进程通信的源码分析
三、优雅地设计通知(7.0)
四、通知权限问题
五、安卓的权限机制(6.0)
六、总结
一、Notification的使用
目前咱们酷狗里的通知使用主要有以下三种场景
1.消息中心的通知
2.下载歌曲的通知
3.通过PlaybackService启动的通知
下面简单分析一下这三种场景的通知是如何实现的。
第一种是使用系统布局生成的普通通知样式
NotificationManagerCompat manager = NotificationManagerCompat.from(this);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentTitle() [1]
.setLargeIcon() [2]
.setContentText() [3]
.setNumber() [4]
.setSmallIcon() [5]
.setWhen() [6]
.setContentIntent(pendingIntent);
manager.notify(tag, id, builder.build());
第二种是使用自定义的布局生成的通知样式
NotificationManagerCompat manager = NotificationManagerCompat.from(this);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setWhen()
.setSmallIcon()
.setLargeIcon()
.setContentIntent(pendingIntent);
RemoteViews remoteView = new RemoteViews(getPackageName, R.layout.custom);
remoteView.setTextViewText(R.