Android---《第一行代码》(第3版)第九章-通过“问题树”的方式学习【多媒体-通知】
最近,忙着面试、入职、毕业论文初稿等一堆事,所以暂停了这本书的学习。但是,我觉得还是要保证明天的输入,所以后面不保证一章一章的学,不过会尽可能的一小节(形成知识体系的闭环)学习与分享。
有人可能会好奇,标题中的“问题树”是什么东西?其实这是我在【古典】dalao的《跃迁》这本书中学习到的,简单说一下,就是平时,我们经常是总结知识点,形成“知识树”(就是之前博客中的知识网络结构图),这个方法没错,也值得使用。但是,我们有时候从“问题树”出发,会有更强的思路。个人觉得这两种方法,因人而异。可以都尝试一下,然后选择自己比较容易接受的,或者结合两种方法一起来用。
今天学习的是【通知】
主要的三个问题如下:
问题1.发送一个通知的整个流程里面涉及的哪些对象呢?
问题2.如何创建这些对象?
问题3.如何发送一个通知?
问题4.如何取消一个通知?
常规的问题解决后,再看看有别的延伸吗?
问题5.通知还有别的什么操作吗?
那么我们一一来揭开谜底。
1.发送一个通知的整个流程里面涉及的哪些对象呢?
通知主要的就是3个成员,管理者,通知,渠道。我们可以看到渠道和通知有多个。
问题1.1:那么管理者怎么知道是哪一个呢?因此,我们可以给通知和渠道加上唯一的id,这样就可以做区分了。
问题2.如何创建这些对象?
成员 |
如何创建 |
管理者(NotificationManager) |
通过调用Context的getSystemService(Contxt.NOTIFICATION_SERVICE)方法获取。 |
渠道(NotificationChannel) |
通过NotificationChannel(渠道id,渠道名字, 重要等级)创建一个渠道, 然后通过管理者的createNotificationChannel(渠道实例) |
通知(Notification) |
通过NotificationCompat.Builder(context,渠道id)创建一个通知 |
问题3.如何发送一个通知?
这个比较简单,通过管理者实例的notify(渠道id,通知)方法,就可以将notification发送到对应渠道中。
问题4.如何取消一个通知?
1.在创建通知时,通过setAutoCancel(true) 设置自动取消
2.或者调用管理者的cancel(通知id)手动取消通知
问题5.通知还有别的什么操作吗?
问题5.1:如何实现通知的点击事件
通过Intent和PendingIntent,创建意图,然后在创建通知的时候setContentIntent(PendingIntent的实例)
问题5.2:如何设置图片通知
在创建通知的时候通过setStyle()方法可以设置图片。
具体细节,可以阅读《第一行代码》(第3版)p355-366。