Android学习|控件——Notification通知
一、前提
实现通知,要创建两个对象 ----- Notification、NotificationManager进行操作。
二、两个对象的的构建
1、创建NotificationManager
NotificationManager类是一个通知管理器类,这个对象是由系统维护的服务,是以单例模式的方式获得,所以一般并不直接实例化这个对象。
在Activity中,可以使用Activity.getSystemService(String)方法获取NotificationManager对象,Activity.getSystemService(String)方法可以通过Android系统级服务的句柄,返回对应的对象。
在这里需要返回NotificationManager,所以直接传递Context.NOTIFICATION SERVICE即可。
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2、使用Builder构造器来创建Notification
使用Notificationcompat类的Bulder构造器来创建Notification对象,可以保证程序在所有的版本上都能正常工作。
Android8.0新增了通知渠道这个概念,如果没有设置,则通知无法在Android8.0的机器上显示。
Notification notification = new NotificationCompat.Builder(this,“leo”).build();
源码可以看出:NotificationCompat.Builder()构造器中包含两个参数,一个是Context通知,一个是channelId,而channelId是android8.0引入的NotificationChannel通知渠道。
所以这块需要进行版本判断,并创建NotificationChannel对象,同时NotificationChannel构造中的id要与Notification中的channelId保持一致,importance为通知类型,下面有介绍。
(下图为NotificationChannel构造函数)。
2.1、NotificationChannel
通知渠道:Android 8.0引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道。
通知重要程度设置,NotificationManager类中:
IMPORTANCE_NONE:关闭通知
IMPORTANCE_MIN:开启通知,不会弹出,但没有提示音,状态栏中无显示
IMPORTANCE_Low:开启通知,不会弹出,不发出提示音,状态栏中显示
IMPORTANCE_DEFAULT:开启通知,不会弹出,发出提示音,状态栏中显示
IMPORTANCE_HIGH:开启通知,会弹出,发出提示音,状态栏中显示
引用:NotificationManager.IMPORTANCE_HIGH
new NotificationChannel(“leo”, “测试通知”, NotificationManager.IMPORTANCE_HIGH);
3、创建两个对象完整代码
manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//版本大于等于 安卓8.0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationChannel channel =
new NotificationChannel("leo", "测试通知", NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(channel);
}
Notification notification = new NotificationCompat.Builder(this,"leo").build();
4、Notifition常用方法
1、setContentitle(string string):设置标题
2、setContentText(String string):设置文本内容
3、setSmallion(int icon):设置小图标
4、setLargelcon(Bitmap icon):设置通知的大图标
5、setColor(int argb):设置小图标的颜色
6、setContentintent(Pendingintent intent):设置点击通知后的跳转意图
7、setAutoCancellboolean boolean):设置点击通知后自动清除通知
8、setWhen(long when):设置通知被创建的时间
以上方法使用需要在使用构造器、创建时候build()构造前设置
注意点
Android从5.0系统开始,对于通知栏图标的设计进行了修改。
现在Google要求,所有应用程序的通知栏图标,应该只使用alpha图层来进行绘制,而不应该包括RGB图层(总结:图片不能为rgb有色图)。
notification = new NotificationCompat.Builder(this,"leo")
.setContentTitle("重大消息!!!") //设置标题
.setContentText("世界那么大,你想去看看嘛") //设置通知文字
.setSmallIcon(R.drawable.ic_baseline_sms_24) //设置左边的小图标
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.img1)) //设置大图标
.setColor(Color.parseColor("#ffff0000"))
.setContentIntent(pendingIntent) // 设置点击通知之后 进入相关页面(此处进入NotificationActivity类,执行oncreat方法打印日志)
.setAutoCancel(true) //