Android通知笔记

参考:

一. 概念介绍

  • NotificationId
     用来唯一标识一条通知的id,更新通知时候会用到
  • NotificationManager
     用来管理通知的类,一般用来显示(notify),取消(cancel)通知,用getSystemService(Context.NOTIFICATION_SERVICE)方法获取
  • NotificationCompat.Builder
     用来创建通知,并进行一系列设置的类
  • PendingIntent
     一种用来延迟启动Activity、Service、BroadCast的Intent,通过PendingIntent的getXXX获取启动Activity、Service等的PI对象
  • TaskStackBuilder
     创建一个人工的返回栈,用于点击通知之后启动的Activity按返回返回到其父Activity而不是返回到桌面

二. 通知必备的三要素

创建通知必须要有的三要素,说是三要素,但只有小图标是不可缺少的,缺少之后会crash,其他两者缺少的话通知照样能显示

  1. 小图标
     小图标,通过setSmallIcon设置
  2. 标题
     通知标题,通过setContentTitle设置
  3. 详细文本
     通知内容,通过setContentText设置

三. 通知操作

点击通知后进行的操作,常用操作如下:

  1. 打开Activity
    • 利用PendingIntent构建想打开的Activity
    • 调用setContentIntent方法设置PI
  2. 暂停/继续下载
  3. 播放/暂停歌曲
  4. 自定义操作等

四. 通知优先级

通知优先级相当于是一个提示,用来告诉系统用哪种形式显示UI,有五种模式:-2到2;最高级别会以悬浮通知的形式显示

五. 创建简单通知的步骤

  1. 实例化NotificationCompat.Builder对象
  2. 创建点击通知要进行的操作(PendingIntent)
  3. 利用Builder对象对通知进行一系列设置
  4. 实例化NotificationManager对象
  5. 调用NotificationManager对象的notify对象发送通知
mBuilder = new NotificationCompat.Builder(this);//参数为Context的构造函数在android8.0以上版本中已弃用,要用Context,channel的构造函数
        Intent resultIntent = new Intent(this, UpdateActivity.class);
        PendingIntent pi = PendingIntent.getActivity(this, REQ_CODE, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        mBuilder.setSmallIcon(R.mipmap.ic_launcher_round)
                .setContentTitle("Title")
                .setContentText("Hello,World")
                .setContentIntent(pi)
                .setAutoCancel(true);
        mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        mManager.notify(NOTIFICATION_ID, mBuilder.build());

六. 带有扩展布局的通知

带有扩展布局的通知可以有一个展开的大视图,MIUI中可以通过双指下滑打开,原生系统中可以直接查看大视图
PS:Android4.1以上才可用,且不同Rom显示效果都不一样,以下截图均为原生效果

  1. 扩展布局种类:

    • InboxStyle:包含一系列String的大视图

      • 方法列表:
        • setBigContentTitle:展开之后的标题
        • setSummaryText :对添加的String数据的总结,下图中的+3more就是
        • addLine:添加一行数据
      • 效果:


        InboxStyle
    • BigPictureStyle

      • 方法列表:
        • setBigContentTitle:下图中的This is big content title
        • setSummaryText:下图中的This is summary text
        • bigLargeIcon:下图中的右上角图标
        • bigPicture:下图中的大图片
      • 效果:


        BigPictureStyle
    • BigTextStyle

      • 方法列表:
        • bigText:要全部显示出来的content内容,下图中一长串文字就是
        • setBigContentTitle:下图中This is big content title
        • setSummaryText:下图中This is summary text
      • 效果:通知显示的时候,对contentText默认是显示在一行的,而内容要是过多则省略,于是就出来了这个Style,会将所有文字都显示出来


        BigTextStyle
    • MediaStyle

      • 注意:在使用该style之前要添加依赖:implementation 'com.android.support:support-media-compat:version'
      • 方法列表:
      • 效果:用来实现音乐播放器的Style
    • MessagingStyle

      • 方法列表:
      • 效果:可以在通知栏里面进行发消息等操作
    • DecoratedCustomViewStyle

      • 方法列表:
      • 效果:由系统装饰的自定义视图的通知样式。自定义通知,但不是完全的自定义,相当于利用系统的装饰进行自定义
    • DecoratedMediaCustomViewStyle

      • 方法列表:
      • 效果:
  2. 创建扩展布局通知的步骤:

    • 和普通通知一样,实例化Builder,设置三要素
    • 新建一个NotificationCompatStyle(Style就是用来设置展开布局的),给Style进行一系列对应的设置
    • 调用Builder.setStyle方法设置style
    • notify进行显示即可

七. 管理通知

八. 8.0通知渠道适配

前言:8.0对通知渠道进行了较为强硬的要求,不带有通知渠道的通知是不会显示的了。因此要创建通知渠道对其进行适配

  1. 创建通知渠道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //创建了两个通知渠道,聊天信息和推送信息。两个渠道的优先级不同
            createNotificationChannel(CHAT_NOTIFICATION_CHANNEL, "聊天消息", NotificationManager.IMPORTANCE_HIGH);
            createNotificationChannel(SUBSCRIPTION_NOTIFICATION_CHANNEL, "推送信息", NotificationManager.IMPORTANCE_DEFAULT);
        }

/**
     * 创建通知渠道
     * @param id 渠道id,可以为任意字符串。保证全局唯一性即可
     * @param name 通知渠道名称,会显示给用户,用户可以对该渠道进行操作
     * @param importance 通知渠道优先级
     */
    @RequiresApi(api = Build.VERSION_CODES.O)
    private void createNotificationChannel(String id, String name, int importance) {
        NotificationChannel channel = new NotificationChannel(id, name, importance);
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.createNotificationChannel(channel);
    }
  1. 创建通知的时候指定通知渠道
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            Toast.makeText(this, "8.0以上", Toast.LENGTH_SHORT).show();
            Notification notification = new Notification.Builder(this,CHAT_NOTIFICATION_CHANNEL)//就在这里指定渠道
                    .setSmallIcon(R.mipmap.ic_launcher_round)
                    .setContentTitle("聊天消息")
                    .setContentText("今天中午吃啥")
                    .setWhen(System.currentTimeMillis())
                    .build();
            manager.notify(1, notification);
        } else {
            Toast.makeText(this, "8.0以下", Toast.LENGTH_SHORT).show();
            Notification notification = new Notification.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher_round)
                    .setContentTitle("聊天消息")
                    .setContentText("今天中午吃啥")
                    .setWhen(System.currentTimeMillis())
                    .build();
            manager.notify(1, notification);
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容