美文网首页
通知渠道总结

通知渠道总结

作者: 做梦枯岛醒 | 来源:发表于2019-07-29 16:05 被阅读0次

在这之前就知道Oreo系统对于通知做了一个渠道的划分,之前有一次做东西还碰到了这个问题,但是一直没有正儿八经的总结一下,这里来做下总结。

背景

首先为什么要有这个东西?
Google在通知栏上做了很多优化,具体可以参考
https://developer.android.com/guide/topics/ui/notifiers/notifications
官网所给粗来的通知更新日志。其中Android5.0 和 Android 8.0 的更新也是比较大的。

Android8.0 所解决的痛点是 对于一个app的通知,如何接收到有用的,过滤掉没用的。比如说我想收到QQ消息,而不想收到QQ推送的广告(好像没见QQ推送过,随意举个例子),我希望能自己设置接受哪些通知。

于是对于这个问题,Google给出的解决方法是通知渠道。
对于通知渠道,就是把各类通知信息投放到不同的渠道中,用户可以对每个渠道进行操作来限制此类通知的发出规则。(表示不太用这个功能。)

看下微信,虽然是MIUI定制的,但是也能看出最下面通知的类型,其中第一种就是微信消息的通知,另一种就是下载时候用的通知。


点击消息的通知,看到的界面如下。


image.png

对于每个通知渠道,我们可以配置是否允许通知,重要程度,提示方式等等一下属性,而这些属性,需要在程序里初始化,并且初始化之后程序再无法修改。

创建一个渠道

public void createNotificationChannel(){
        if (SDK_INT >= VERSION_CODES.O) {
            NotificationChannel channel = new NotificationChannel("_message","消息通知",NotificationManager.IMPORTANCE_HIGH);
            channel.setDescription("这是用于接受消息的通知渠道");
            notificationManager.createNotificationChannel(channel);
        }
}

其中,创建一个通知渠道需要在8.0以上。
而创建通知渠道需要三个参数,一是id,二是介绍,三是通知重要程度。
其中id是唯一标识,在同一App中不能重复,介绍给用户看的,方便用户对渠道作区分,他们的长度不能太长,否则会被系统做截断;重要程度有几个等级,每个等级的配置不一样,比如说是否开启闪光灯,是否震动等等。

那么配置之后的效果图如下。


这里需要注意一个地方,通知渠道刚安装App是不显示的,只有发出通知的时候才会显示。
同时要注意,如果在代码中修改了渠道信息,也是要发出通知才能看到设置界面的更新的。(目前在MIUI是这样,不确定其他系统是不是。)
对于渠道,我们可以设置很多属性。


image.png

渠道需要在使用前创建,并且重复创建也没事,因为系统会帮你判断是否已经创建,所以不会浪费很多资源。

发送一个通知

if(SDK_INT >= 26){
          NotificationCompat.Builder builder = new NotificationCompat.Builder(context,channelId)
                   .setContentTitle(title)
                   .setContentText(content)
                   .setAutoCancel(true)  .setLargeIcon(BitmapFactory.decodeResource(context.getApplicationContext().getResources(), R.mipmap.ic_launcher_round))
                   .setSmallIcon(R.mipmap.ic_launcher)
                   .setContentIntent(intent);
          NotificationManager  notificationManager = (NotificationManager) context.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
          notificationManager.notify(id,notification);
  }

上述代码说的是在android26上面的创建一个通知,其中所使用的Builder就是新的API所定义的方法,需要传入一个channelId,传入的channelId必须是属于已经创建的channel的,否则会报错。

通知的重要程度

通知的重要程度分为几个等级,其中IMPORTANCE_NONE说明通知已被关闭,其余几个等级权限逐渐放高。



当然如果消息很重要,通知还被用户关掉了,那需要引导用户把通知开关打开。

public void openSetting(){
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel channel = notificationManager.getNotificationChannel("渠道id");
            if(channel.getImportance() == NotificationManager.IMPORTANCE_NONE){
                Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
                intent.putExtra(Settings.EXTRA_APP_PACKAGE,"你的应用包名");
                intent.putExtra(Settings.EXTRA_CHANNEL_ID,"渠道id");
                context.startActivity(intent);
            }
        }
    }

相关文章

  • 通知渠道总结

    在这之前就知道Oreo系统对于通知做了一个渠道的划分,之前有一次做东西还碰到了这个问题,但是一直没有正儿八经的总结...

  • Android8.0收不到通知的问题解决方法

    Android8.0收不到通知,修改后的代码如下: 遇到的问题: 关于Android O 通知渠道总结

  • Android 8.0新特性

    1、通知渠道 — Notification Channels 通知渠道是由应用自行定义的通知内容类别,借助渠道,开...

  • android中通知的用法

    一、通知渠道Android8.0系统引入通知渠道的概念,每条通知都属于一个对应应用的渠道,通知渠道的控制权掌握在用...

  • Android Notificatin 通知

    通知的简单使用 1-通知渠道:android 8.0 必须设置通知渠道,否则通知不会显示。2-通知图标问题:and...

  • 关于Android 通知

    什么是通知渠道 每条通知都要属于一个对应的渠道。每个App都可以自由地创建当前App拥有哪些通知渠道,但是这些通知...

  • Android O(8.0)Notification Chann

    上面这张图,将具有形同形态,相同表现形式的通知渠道A ,通知渠道B归纳到了同一个渠道组中。 通知渠道的引入可以很方...

  • Notification Channel使用姿势

    上面这张图,将具有形同形态,相同表现形式的通知渠道A ,通知渠道B归纳到了同一个渠道组中。 通知渠道的引入可以很方...

  • 消息通知—站内信消息推送

    上一篇《消息通知推送》中总结了消息通知推送的几种方式,这次就来聊聊产品中站内信消息推送渠道的功能建设。 同样,站内...

  • Android8 通知适配

    Android8中引入了通知渠道,大意就是将通知分组管理。适配起来其实就是创建通知渠道,然后创建通知的时候将通知与...

网友评论

      本文标题:通知渠道总结

      本文链接:https://www.haomeiwen.com/subject/zimvrctx.html