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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐