Android:通知(Notification)用法

2020-09-06 15:36:04

一、基本用法

通知可以在活动(Activity)、广播(Broadcast)和服务(Service)中创建,只是在活动中创建的情况很少见,一般都是在程序进入后台时才需要通知。

使用方法,直接看代码:

Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("This is content title") //指定通知标题
.setContentText("This is content text") //指定通知正文内容
.setWhen(System.currentTimeMillis()) //指定通知被创建的时间,单位:毫秒。下拉状态栏时会显示此时间
.setSmallIcon(R.mipmap.ic_launcher) //设置通知小图标,只能用纯alpha图层的图片进行设置,小图标会显示在系统状态栏上
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) //设置通知大图标,当下拉状态栏时就可以看到
.setContentIntent(pi)
.setDefaults(NotificationCompat.DEFAULT_ALL)
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.big_image)))
.setPriority(NotificationCompat.PRIORITY_MAX)
.build();
manager.notify(1, notification); //显示通知。第一个参数要保证都是不同的
注意:
PendingIntent 与Intent 有些类似,有很多共同点。都可以启动活动、服务、广播等。
不同的是Intent 倾向于立即执行某个动作,而PendingIntent倾向于在某个合适时候执行。
参数1:Context
参数2:一般用不到,通常为0
参数3:一个Intent对象
参数4:用于确定PendingIntent的行为,通常为0。(有4个可选值:FLAG_ONE_SHOT、FLAG_NO_CREATE 、FLAG_CANCLE_CURRENT、FLAG_UPDATE_CURRENT)
当点击通知进入新界面后,你会发现状态栏的图标没有消失,那是因为没有对通知进行取消操作。解决方法有两种:
方法一:
Notification notification = new NotificationCompat.Builder(this)
... ...
.setAutoCancel(true)
.build();
方法二:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.cancel(1); //1,就是创建通知时的id
二、进阶
NotificationCompat.Builder 中提供了很多API供我们使用,常用的如下面几种:
1.播放音频
Notification notification = new NotificationCompat.Builder(this)
... ... ...
.setSound("/system/media/audio/ringtones/xxx.ogg") // 需要提供一个音频的URI参数
.build();
2.手机震动
Notification notification = new NotificationCompat.Builder(this)
... ... ...
.setVibrate(new long[] {0,1000,1000,1000}) // 设置手机静止和震动的时长
.build();
3.控制LED灯
Notification notification = new NotificationCompat.Builder(this)
... ... ...
.setLights(Color.GREEN,1000,1000) // 控制绿灯闪烁,亮1000毫秒,灭1000毫秒
.build();
也可以写成默认的效果
.setLights(NotificationCompat.DEFAULT_ALL)
三、高级功能
1.setStyle()方法:构建富文本通知内容。
Notification notification = new NotificationCompat.Builder(this)
... ... ...
.setStyle(new NotificationCompat.BigTextStyle().bigText(“A long string ... ... ...”))
.build();
这样通知中的文本就可以全部显示,而不是被省略号代替。
也可以显示大图片,如下面代码:
Notification notification = new NotificationCompat.Builder(this)
... ... ...
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResource(),R.drawable.big_image)))
.build();
2.setPriority()方法:设置通知的重要程度。
一共有5个可选值(PRIORITY_DEFAULT, PRIORITY_MIN, PRIORITY_LOW, PRIORITY_HIGH, PRIORITY_MAX)。
Notification notification = new NotificationCompat.Builder(this)
... ... ...
.setPriority(PRIORITY_MIN) // PRIORITY_ DEFAULT和不设置的效果是一样的
.build();

其中PRIORITY_MAX表示极重要程度,需要用户马上知道,甚至用户需要立刻做出响应的情况。此时系统状态栏不再是显示图标了,而是直接显示横幅,此时即使用户在看电影或者玩游戏,也能第一时间看到。