Android-Notification(通知)

1,135 阅读2分钟

「这是我参与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对象传入即可。