「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」
Android-Notification(通知)
当应用程序在后台运行,希望向用户发出一些提示学习,就需要借助Notification(通知)来实现。在发出一条通知后,手机最上方的状态栏会显示一个通知的图标,下拉状态栏后就可以看到通知的详细内容。
下面我们来学习一下通知的基本用法,首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取到,getSystemService()方法接收一个字符串参数用于确定获取系统的哪个服务,这里我们传入Context.NOTIFICATION_SERVICE即可,因此,获取NotificationManager的实例就可以写成:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
接下来需要使用一个Builder构造器来创建Notification对象,但问题在于,几乎Android系统的每一个版本都会对通知这部分功能进行或多或少的修改,API不稳定问题在通知上面突显的尤为严重,这个问题我们通过support库中提供的兼容API可以解决,support-v4库中提供了一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证我们的程序在所有的Android系统版本上都能正常工作了。
创建Notification对象的代码如下:
Notification notification = new NotificationCompat.Builder(context).build();
下面是一段代码展示了如何创建通知:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sendNotice = (Button) findViewById(R.id.send_notice);
sendNotice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.send_notice:
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)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.build();
manager.notify(1,notification);
break;
default:
break;
}
}
});
}
上面的代码中一共调用了5个设置方法,我们来逐一分析。setContentTitle()方法用于指定通知的标题内容,下拉系统状态栏就可以看到这部分内容。setContentText()方法用于指定统治的正文内容,同样下拉系统状态栏就可以看到这部分内容,setWhen()方法用于指定通知被创建时间,以毫秒为单位,当下拉系统通知栏时,这里指定的时间会显示在相应的通知上。setSmallIcon()方法用于设置通知的小图标,注意只能使用纯ailha图层的图片进行设置,小图标会显示在系统通知栏上。setLargeIcon()方法用于设置通知的大图标,当下拉系统通知栏时,就可以看到设置的大图标了。
然后通过调用NotificationManager的notify()方法就可以让通知显示出来了。notify()方法接收两个参数,第一个参数是id,要保证每个通知所指定的id是不一样的,第二个参数是Notification对象,这里直接将我们刚刚创建好的Notification对象传入即可。