一、预期实现的功能
- 通知弹出横幅,通知发送时,手机弹出通知横幅,显示一段时间。
- 锁屏显示消息
二、如何开启通知
1 检测API版本
从Android 8(API Level 26,Android O) 开始,之前获取通知的方式在API版本较新的手机上已经不适用了。为了让应用的发送通知的模式适合各个API版本,需要在设置通知前检测API版本。
检测API版本的方法可以是if…else…语句块,判断API的版本。API版本可以通过build.VERSION.SDK_INT获取,需要导入模块android.os.build。
if(build.VERSION.SDK_INT>26){
//针对高级API的通知操作
} else {
//对较低版本API的通知操作
}
2 针对API Level 26 以上的通知操作
API level 26引入了通知渠道的概念,要想成功发送通知,需要设置一个消息渠道Channel。
基本的步骤是:
- 建立NotificationManager对象;
- 判断API等级大于等于26→建立通知渠道NotificationChannel对象,构造函数传入两个参数,一个是通知渠道的id,另一个是通知渠道的name,还可以指定第三个参数,是NotificationManager中的静态常量(整型),表示通知的重要程度,形式如同NotificationManager.IMPORTANCE_DEFAULT,DEFAULT及以上,通知时默认会有震动;
- NotificationManager对象调用createNotificationChannel方法,传入之前构造的消息渠道;
- 建立NotificationCompat.Build对象,构造函数传入当前上下文,以及之前的消息渠道的id;
- NotificationCompat.Build对象调用各种set方法,设置通知的各种属性,最后调用build()方法,生成Notification对象,将其赋值给一个Notification实例notice;
- NotificationManager调用notify方法,传入notice的id(整数,自己指定,用于区分)以及notice对象,即可发送通知。
还可以加入一些别的逻辑,例如将上述过程加入到按钮点击事件中,即可在按钮点击时发送消息。
下面就给出一段实例程序和运行效果图,测试机型HONOR 20,Android10(Android Q,API level 29)系统。
//代码较长,不截图了
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.NotificationCompat;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;