关于Android O的通知(Notification)改动
介绍
通知(Notification)是Android系统中一个常用的功能。当某些应用程序需要向用户发送提示消息,而该应用程序当前又不在前台运行时,就可以借助通知功能来实现。发出一条通知后,手机最上方的状态栏中就会提示一个通知的图标,下拉状态栏后就可以看到通知的详细内容。
通知(Notification)的基本用法:
首先需要一个NotificationManager来对通知进行管理,通过调用Context的getSystemService()方法可以得到一个NotificationManager实例。接着传入NOTIFICATION_SERVICE确定获取系统的通知服务。
NotificationManager manager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
接下来需要使用一个Builder构造器来创建Notification对象。为了兼容低版本,support-v4库中提供了一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证我们的程序在所以Android版本上都可以正常工作。
新版本-NotificationCompat.Builder()过时
最近在看第二版《第一行代码 Android》,发现使用里面“通知”功能例程代码
NotificationCompat.Builder(this)会提示
‘Builde(android.content.Context)’ is deprecated
意思是不赞同使用该方法。在Android 8.0以上系统运行无效,而在Android 6.0系统可以正常运行。
上网查资料发现,谷歌在Android 8.0对通知(Notification)功能做了改动,引入了通知渠道(Notification Channel)特性, Builder(context)被取而代之:
public Builder(@NonNull Context context, @NonNull String channelId)
对于Android 8.0以上系统需要开启通知通道(chanel):
//只在Android O之上需要渠道
if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O){
//这里的第一个参数要和builder()中的的channelId一致
NotificationChannel notificationChannel = new
NotificationChannel("defalut", "name",NotificationManager.IMPORTANCE_HIGH); //创建通知通道
manager.createNotificationChannel(notificationChannel);}
然后开始对通知的编码
Notification notification = new NotificationCompat.Builder(this,"defalut")
.setContentTitle("my title")
.setContentText("my text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher))
.build();
manager.notify(2,notification);