Android学习笔记:通知(Notification)

本文详细介绍了Android中通知(Notification)的使用,包括基本用法、创建步骤、取消方法、常见样式,以及Android8.0的适配问题。通过NotificationManager和NotificationCompat.Builder构建通知,并讨论了通知的显示等级和Android8.0以上的渠道设置需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通知(Notification)可以让我们在获得消息的时候,在状态栏、锁屏界面来显示相应的信息。当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。


一、通知的基本用法

  • 1、在活动中创建
  • 2、在广播接收器里创建
  • 3、在服务里创建

二、创建通知的详细步骤

(1)首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取到。 getSystemService()方法接收一个字符串参数用于确定获取系统的哪个服务,这里我们传入Context.NOTIFICATION_SERVICE即可。

NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);

(2)接下来需要使用一个Builder构造器来创建Notification对象,为了防止API不稳定的问题,采用support库中提供的兼容API。support-v4库中提供了一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证我们的程序在所有的Android系统版本上都能正常工作。

Notification notification = new NotificationCompat.Builder(context).build();

// 上述代码只是创建了一个空的Notification对象,并没有什么实际作用
// 可以在build()方法之前连缀任意多的设置方法来创建一个丰富的Notification对象
Notification notification = new Notification.Builder(context)
		.setContentTitle("This is content title") //指定通知的标题内容,下拉系统状态栏就可以看到这部分内容
		.setContentText("This is content text") //指定通知的正文内容,下拉系统状态栏就可以看到这部分内容
		.setWhen(System.currentTimeMills()) //指定通知被创建的时间(以毫秒为单位),当下拉系统状态栏时,指定的时间会显示在相应的通知上
		.setSmallIcon(R.drawable.small_icon) //设置通知的小图标
		.setLargeIcon(BitmapFactory.decodeResource(getResource(), R.drawable.large_icon)) //设置通知大图标
		.build();

(3)以上工作完成后,只需调用NotificationManager的notify()方法就可以让通知显示出来了。

//notify()方法接收两个参数:
//第一个参数是id,要保证为每个通知所指定的id都是不同的。
//第二个参数是Notification对象
manager.notify(1, notification);

补充:上述代码在Android8.0后已经过时,需要新增参数。
先说明为什么NotificationCompat.Builder()过时问题,在安卓8.0 “O” 对通知栏新增了一个ChannelId参数,在new的时候添加上channelId即可,如下:

new NotificationCompat.Builder(this,"default")

三、取消通知的方法(两种解决方法)

(1)一种是在NotificationCompat.Builder中再连缀一个setAutoCancel()方法。

Notification notification = new NotificationCompat.Biilder(this)
	...
	.setAutoCancel(true)
	.build();

在setAutoCancel()方法传入true,表示当点击了这个通知的时候,通知会自动取消掉。

(2)一种是显式地调用NotificationManager的cancel()方法将它取消。

NotificationManager manager = (NotificationManager)getSystemService(Notification_SERVICE);
manager.cancel(1);

在cancel()方法中传入1,当前1指代的是通知设置的id。因此,如果想取消哪条通知,在cancel()方法中传入该通知的id即可。


四、常见的通知样式

(1)普通的Notification
(2)折叠式Notification

折叠式Notification是一种自定义视图的Notification,用来显示长文本和一些自定义的布局场景。它有两种状态:一种是普通状态下的视图(如果不对其进行自定义,则和普通Notification的样式一样),一种是展开状态下的视图(需要自定义视图,而且这个视图显示的进程和我们创建视图的进程不在一个进程,所以需要使用RemoteViews)。

(3)悬挂式Notification

悬挂式Notification是Android 5.0 新增加的方式。和前两种显示方式不同的是,前两种需要下拉通知栏才能看到通知,而悬挂式不需要下拉通知栏就能直接显示出来悬挂在屏幕上方,并且焦点不变,仍在用户操作的界面,因此不会打断用户的操作,其过几秒就会自动消失


五、通知的显示等级

Android 5.0 加入了一种新的模式Notification的显示等级,共有以下三种:

  • VISIBILITY_PUBLIC:任何情况都会显示通知。
  • VISIBILITY_PRIVATE:只有在没有锁屏时会显示通知。
  • VISIBILITY_SECRET:在pin、password等安全锁和没有锁屏的情况下才能够显示。

六、Android8.0的Notification不显示的问题

问题定位:Notification在Android8.0版本以上设置时,需要创建通知的渠道信息才能够实现正常的通知。

解决方案:首先判断当前手机的版本,8.0对应的版本是O,如果当前版本小于O时,则执行正常的Notification操作,如果当前版本大于O时,在原有Notification的基础上增加设置渠道信息。

教程资料:https://developer.android.google.cn/training/notify-user/channels?hl=zh-cn


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值