简介
通知是指 Android 在应用的界面之外显示的消息,旨在向用户提供提醒、来自他人的通信信息或应用中的其他实时信息。用户可以点按通知来打开应用,也可以直接在通知中执行某项操作。
在android8.0之前,多个通知,无论是不是同一个一个应用的通知,逐个划分下来,占满了屏幕,不太友好。在8.0后加入了通知渠道,方便了对通知的管理。
初级使用
添加支持库
虽然使用 Android Studio 创建的大部分项目包含使用 NotificationCompat 所必需的依赖项,但您还是应该验证模块级 build.gradle 文件是否包含以下依赖项:
dependencies {
implementation "com.android.support:support-compat:28.0.0"
}
即当我们的NotificationCompat 不可用时,我们需要添加如上库,但一般的编译器的支持库中有 NotificationCompat的依赖,所以不用添加,比如Android stdio可不添加如上依赖库。
创建基本通知
最基本、精简形式(也称为折叠形式)的通知会显示一个图标、一个标题和少量内容文本。
1.创建NotificationManager对通知进行管理
//获取NotificationManager实例
NotificationManager manager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
2.创建渠道并设置重要性
在 Android 8.0 及更高版本上使用通知,必须先通过向 createNotificationChannel() 传递 NotificationChannel 的实例在系统中注册应用的通知渠道
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
//通知渠道的name,自己设定
String name = getString(R.string.channel_name);
//通知渠道的id
String id = "my_channel_01";
NotificationChannel channel = new NotificationChannel(name,id,
NotificationManager.IMPORTANCE_DEFAULT);
manager.createNotificationChannel(channel);
}
参数 | 说明 |
---|---|
id | 通知渠道的ID,用户不可见,实例化Notification的时候需要用到 |
name | 这个是方便用户管理通知用的,用户可见 |
重要性 | 渠道优先级 |
注:如果这个ID在实例化Notification的时候没有对应的上,通知栏无效,系统则将Toast放入一个错误*(软件不会闪退)*
3.设置通知内容
这里设置了一些列set方法可设置通知的各种参数
Notification notification = new NotificationCompat.Builder(MainActivity.this,"my_channel_01")
.setContentTitle("My notification") //设置标题
.setContentText("Hello World!") //设置正文
.setWhen(System.currentTimeMillis()) //设置被创建的时间
.setSmallIcon(R.mipmap.ic_launcher) //设置通知的小图标
.setAutoCancel(true) //点击时通知取消
.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher)) //设置通知的大图标
.build();
4.设置点击事件
先用Intent表达出我们想要启动的活动的意图,然后再把构建好的Intent对象传到PendingIntent的getActivity中。
Intent intent = new Intent(MainActivity.this,MainActivity2.class);
PendingIntent pi = PendingIntent.getActivity(MainActivity.this,0,intent,0);
在NotificationCompat.Builder中添加
.setContentIntent(pi) //设置通知点击
5.显示通知

manager.notify(1,notification);
进阶用法
注意:NotificationChannel 的配置会覆盖 Notificaition.Builder 的配置在使用了 NotificationChannel 之后,关于震动、声音、呼吸灯的设置都需要在 NotificationChannel 中进行设置
1.设置声音,震动,呼吸灯等
//配置通知出现时的闪灯(如果 android 设备支持的话)
channel.enableLights(true);
//设置灯的颜色
channel.setLightColor(Color.WHITE);
channel.setVibrationPattern(new long[]{
100, 200, 100, 200});
//设置震动
//channel.setSound()
//提供一个Uri,用于在通知发布到此频道时播放声音
if( channel.canBypassDnd() ) //检测是否绕过免打扰模式
channel.setBypassDnd(true); //设置绕过免打扰模式
if(channel.getLockscreenVisibility()==Notification.VISIBILITY_PUBLIC){
channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
//设置在锁屏界面上显示这条通知
}
2.创建富文本通知内容
正常情况下通知内容如果长度太长,会自动压缩,可通过setStyle()来弥补这种缺陷,显示长文字
.setStyle(new NotificationCompat.BigTextStyle().bigText("abcgfhkhhahhhwhjgjgjgjgjkagjgdguagdiawdyid"));
3.显示大图
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(
BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)))