Notification
简介
通知是指 Android 在应用的界面之外显示的消息,旨在向用户提供提醒、来自他人的通信信息或应用中的其他实时信息。用户可以点按通知来打开应用,也可以直接在通知中执行某项操作。
在本章里将会讲解三种基本通知方式与一些兼容处理问题
创建基本通知
//通道id,下面代码会用上
String channelId = "100";
//设置点击后的内容
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.baidu.com"));
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
//以前是使用Notification.Builder类来构建Notification,但随着android的更新
//为了兼容低版本,因此使用NotificationCompat.Builder类来构建Notification
NotificationCompat.Builder builder =
//第一个参数是Context
//第二个参数是渠道id,在8.0以上的系统是必须的,但在低版本里会被忽略
new NotificationCompat.Builder(this, channelId)
.setContentTitle("标题")
.setContentText("这是显示的内容...")
//小图标,这是必须的
.setSmallIcon(R.drawable.ic_android_black_24dp)
//大图标,不必须
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.get_money))
//设置通知点击后的操作
.setContentIntent(pendingIntent)
//通知时间,使用NotificationCompat.Builder会自动的添加时间参数
//但我们可以手动改,比如说把时间改成1970年
.setWhen(System.currentTimeMillis())
//设置自动取消,点击时会自动消失
.setAutoCancel(true)
//通知优先级,并不必须,但为了兼容低版本,所以还是设置吧
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
//NotificationManager manager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
//获取NotificationManager,上面是不使用兼容的版本的类,我们这里使用兼容版本的类
NotificationManagerCompat manager = NotificationManagerCompat.from(this);
//显示Notification
manager.notify((int) System.currentTimeMillis(), builder.build());
以上代码可以直接在android8.0(API 26)以下的版本运行,但无法在android8.0及以上的系统运行,因为在android8.0以上的系统发布通知必须创建渠道并设置渠道的重要程度
创建渠道
String channelName = "普通通知";
String description = "这是个普通通知的渠道";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
//创建渠道
//第一个参数是渠道id,id是String类型的,不建议太长,太长可能被截断
//第二个参数是渠道名字,是CharSequence类型的,也是不建议长太,太长可能被截断
//第三个参数是渠道重要性,int类型,有以下几个参数
//IMPORTANCE_MIN 最低优先级,没有通知声音也不会出现在状态栏上
//IMPORTANCE_LOW 没有通知声音但通知栏有通知
//IMPORTANCE_DEFAULT 发出通知声音并且通知栏有通知,无法显示横幅
//IMPORTANCE_HIGH 发出通知声音并显示为提示通知,能显示横幅
//IMPORTANCE_MAX 没有使用
NotificationChannel channel = new NotificationChannel(channelId,channelName,NotificationManager.IMPORTANCE_DEFAULT);
//设置渠道描述,描述这个渠道是用来干嘛的,不能太长,不然会被截断
channel.setDescription(description);
//创建渠道
NotificationManagerCompat.from(this).createNotificationChannel(channel);
}
上面的代码应该放到发布通知前调用,此外这段代码可以反复调用,因为创建现有通知渠道不会执行任何操作。
下面是完整代码
private void</