Notification基础与兼容处理

本文介绍了Android中创建基本通知、折叠式通知和提醒式(悬挂式)通知的方法,包括如何处理Android 8.0及以上版本的通知渠道创建,以及如何引导用户开启通知权限。详细讲解了通知的显示规则和兼容性问题。
摘要由CSDN通过智能技术生成

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</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值