Android 消息通知栏用法详解(二) 适配8.0
通知(Notification) 是Android 系统比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息的时,而该应用程序又处于后台,就可以借助通知来实现。比如微信弹窗。通过这篇文章,我们将学习到
Notification 的基本用法Notification 声音、优先级、多文字和大图片的显示Notification 高级玩法自定义 Notification 的布局
官网 Nitification 资料
一、基本用法
通知可以在 广播、activity 或者 service 去创建,不过在 activity 创建得比较少,一般都是应用在后台了,才需要去弄,不过我们是demo,所以写哪都没关系。
创建通知的基本步骤如下:
使用getSystemService 拿到 NotificationManager 的管理类使用NotificationCompat 设置标题、内容、图片等最后调用 NotificationManager 的 notify() 调出通知栏
上面中,为什么要使用 NotificationCompat 呢,因为Android系统的每一个版本都会对通知这部分功能进行或多或少的修改,API 比较不稳定,所以这里使用 v4 的包去兼容,当然,如果你使用 androidx,也就没啥问题了。 所以,一个简单的通知实例如下 :
以下代码建议在8.0之下运行,8.0以上,请参考下一篇文章
首先创建 NotificationManager
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(this)
.setContentTitle("这是标题")
.setContentText("我是内容,我是demo")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher));
//通过 builder.build() 拿到 notification
mNotificationManager.notify(1, mBuilder.build());
解释如下:
setContentTitle 为设置标题setContentText 为正文内容setWhen 为通知创建时间,以 ms 为单位setSmallIcon 通知的小图标,注意只能使用 纯 alpha 图层的图片进行设置setLargeIcon 通知栏的大图标
都设置完成之后,只要使用 nofity() 即可,其中,第一个参数为 id,后面用来取消通知的。所以随便填一个数字即可,效果如下。
可以看到,小图标是灰色的。当然了,google 要求是 alpha 的图层呢。 什么是 纯 alpha 的图层图片呢?通俗来讲,就是图片不要带颜色就可以了,当然UI设计师肯定知道,就是用 alpha 层去绘制图片吗,咱们也可以从 阿里巴巴的图片库下载,比如:
然后咱们设置一下 但是,发现默认还是灰色的,这里可以使用 setcolor 去设置:
.setColor(getResources().getColor(R.color.colorPrimary))
这里咱们就设置好了小图标了
1.1 设置点击事件
一般的通知栏都是可以点击的,但是我们点击了一下,发现并没有什么用。当然,我们都没设置点击事件。 notification 的点击事件,可以通过设置 setContentIntent 来实现。它需要传递一个 PendingIntent。从而实现点击之后的跳转意图。 PendingIntent 的用法也很简单,它可以通过 getActivity(),getBroadcast() 和 getService() 来获取不同的实例,一个简单获取 activity 的方法如下:
Intent intent = new Intent(this,SecondActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_CANCEL_CU