前言:Android8.0后学过第一行代码第二版的人都会踩的坑之----Notification
原因: Android8.0后引进了NotificationChannel
主题:Android8.0后 Notification的基本使用操作
1.首先先获取NotificationManager:
方法如下:直接调用Activity的getSystemService(String name)方法获取
参数就直接设置为Context.NOTIFICATION_SERVICE-----该参数等价于字符串notification
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
2进行版本判断, 若版本大于等于8.0,则获取NotificationChannel对象并且进行绑定:
获取和判断的方法如下:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationChannel channel = new NotificationChannel("Message", "通知", NotificationManager.IMPORTANCE_HIGH);
manager.createNotificationChannel(channel);
}
参数分析:第一个参数需传入id,id要结合Notification的id,下面会提到,这里传入"Message",第二个参数也是一个字符串(可以理解成提示作用),一般自己按功能决定(可任意),比如我想简单的实现通知功能,就传入"通知"
第三个参数:通知的重要程度, 这里传入NotificationManager.IMPORTANCE_HIGH
重要程度值的汇总会在下文附上
3.创建Notification:
Notification notification = new NotificationCompat.Builder(this,"Message")
.setContentText("恭喜您,打开通知成功")
.setContentTitle("开启通知")
.setAutoCancel(true)
.setSmallIcon(R.drawable.ic_back)
.setContentIntent(pendingIntent)
.build();
分析: 通过NotificationCompat.Builder(Context context, String id)中的build获取Notification----------Notification的常用属性在下文会附上
参数1:Context,这里还是直接传入this就好,因为活动本身就是间接继承Context
参数2:id,这里依旧传入“Message”-----因为要去channel里的id相互对应
4.最后调用NotificationManager的notify方法将通知显示出来:
manager.notify(1,notification);
分析: 参数一,传入一个id,一般也是自定义,有时候若需要使用该notifaction就可能用到
参数二,就是我们的notification对象
======================================
最后运行就可以了。
重要程度参考值:即上文获取NotificationChannel的第三个参数:
下面附上Notification的基本属性:
最后再加一个小点: PendingIntent的获取方式:
Intent intent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
PendingIntent 于 Intent的区别:
Intent 表示一个目的,第一个参数表示所在类,第二个参数表示目标类。
PendingIntent 是 对Intent的包装,即Intent就是一个意图,直接执行
而PengdingIntent则也可不执行,可以传递给需要用到的程序上,比如Application,Notification等
希望能帮到你们噢!