知识整理

我一直在找 渠道分组的 内容,网上一圈都是复制粘贴。官方文档只说了怎么用。
最后整理 在此记录。

概念

通知渠道 NotificationChannel

API-26以后 需要先创建 通知渠道 才能发送通知

渠道分组 NotificationChannelGroup

将 通知渠道分组归类

创建 分类 和 渠道的示例

一般 只会用到 渠道 。分类可以忽略。但是渠道太多时 可使用分类更好的描述。
在原生google上 分类描述能很好的标识当前分类是干啥用的。但是在国内定制rom或其他第三方rom上 看起来就有点问题了。

//通知渠道
public final static String CHANNEL_1 = "a_xxx";
public final static String CHANNEL_2 = "a_xxx_xxx";
public final static String CHANNEL_3 = "b_xxx";
public final static String CHANNEL_4 = "c_xxx";

//渠道分组
public final static String CHANNEL_GROUP_A = "a_group_xxx";
public final static String CHANNEL_GROUP_B = "b_group_xxx";
    
		//通知服务
        NotificationManager manager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
        
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        	
//构造渠道分组
            NotificationChannelGroup group_a = new NotificationChannelGroup(CHANNEL_GROUP_A, "分组A");
            NotificationChannelGroup group_b = new NotificationChannelGroup(CHANNEL_GROUP_B, "分组B");

            //设置渠道分组的描述
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.P) {
                group_a.setDescription("这是分组A的描述");
                group_b.setDescription("这是分组B的描述");
            }

            //统一创建渠道分组
            manager.createNotificationChannelGroup(group_a);
            manager.createNotificationChannelGroup(group_b);

//构造通知渠道

            //自定义铃声1
            Uri uri = Uri.parse("android.resource://" + AppConst.getInstance().getPackageName() + "/" + R.raw.xxx);
            AudioAttributes att = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).setContentType(AudioAttributes.CONTENT_TYPE_SPEECH).build();

            //通知渠道1
            NotificationChannel channel_1 = new NotificationChannel(CHANNEL_1, "xxx", NotificationManager.IMPORTANCE_HIGH);
            channel_1.enableVibration(true);//启用震动
            channel_1.setVibrationPattern(new long[]{1000, 1000, 1000});//设置震动模式
            channel_1.enableLights(true);//启用呼吸灯
            channel_1.setSound(uri, att);//启用自定义铃声

            //自定义铃声2
            Uri bellUri = Uri.parse("android.resource://" + AppConst.getInstance().getPackageName() + "/" + R.raw.xxx_xxx);
            AudioAttributes bellAtt = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).setContentType(AudioAttributes.CONTENT_TYPE_SPEECH).build();

            //通知渠道2
            NotificationChannel channel_2 = new NotificationChannel(CHANNEL_2, "xxx_2", NotificationManager.IMPORTANCE_HIGH);
            channel_2.enableVibration(true);//启用震动
            channel_2.setVibrationPattern(new long[]{2000, 3000, 2000, 3000, 2000, 3000, 2000, 3000});//设置震动模式
            channel_2.enableLights(true);//启用呼吸灯
            channel_2.setSound(bellUri, bellAtt);//启用自定义铃声

            //通知渠道3
            NotificationChannel channel_3 = new NotificationChannel(CHANNEL_3, "xxx_3", NotificationManager.IMPORTANCE_MIN);
            channel_id_download.enableVibration(false);//关闭震动
            channel_id_download.enableLights(false);//关闭呼吸灯
            channel_id_download.setSound(null, null);//设置铃声为空

            //通知渠道4
            NotificationChannel channel_4 = new NotificationChannel(CHANNEL_4, "xxx_4", NotificationManager.IMPORTANCE_MIN);
            channel_4.enableVibration(false);//关闭震动
            channel_4.enableLights(false);//关闭呼吸灯
            channel_4.setSound(null, null);//设置铃声为空

            //设置组 需要放在 创建渠道之前
            channel_1.setGroup(CHANNEL_GROUP_A);
            channel_2.setGroup(CHANNEL_GROUP_B);
            channel_3.setGroup(CHANNEL_GROUP_B);
            channel_4.setGroup(CHANNEL_GROUP_B);

            //统一创建渠道
            manager.createNotificationChannel(channel_1);
            manager.createNotificationChannel(channel_2);
            manager.createNotificationChannel(channel_3);
            manager.createNotificationChannel(channel_4);

            //删除之前的渠道
            manager.deleteNotificationChannel(CHANNEL_xxx);
            manager.deleteNotificationChannel(CHANNEL_xxxxx);

        }
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐