Android 5.0+ 之Notification

版权声明:转载请注明出处。 https://blog.csdn.net/u012552275/article/details/52594695
Notification在日常开发中是会经常遇到的,而在5.0之后,又发生了一些微妙的变化。本文将带你介绍Notification的使用方法。

官网截图

        当新的通知被发布或删除,或它们的次序改变的时候,从系统接收呼叫的服务。大概可以这样翻译,很难理解是吧,那我们不需要按照它的意思来,我们就把它翻译为一个通知,就可以了。下拉状态栏后会显示完整的信息。当用户点击这个 notification 时,系统就会处理创建 notification 是传入的 Intent(通常是启动一个 Activity).你也可以给你的notification添加声音、震动、闪光灯功能。当后台服务需要提示用户来响应某个事件时,应该使用状态栏通知。后台服务不应该自己去启动一个 activity 来与用户互动,它应该创建一个状态栏通知,当用户选择这个通知时再去启动 activity。继承关系如图:

关系图

感兴趣的同学可以http://www.android-doc.com/reference/android/app/Notification.html自己研究。

一般Notification分为三类,普通、折叠、悬挂三种:
普通:在状态栏显示一个图标,下拉通知栏,会看到一个图标和详情,如图:

普通

折叠:在状态栏显示一个图标,并且有两种视图,一种是普通视图,另一种可以展开视图。如图:

展开时的样式
合起来的样式

悬挂:当前操作不会打断,焦点不变,不需要下拉通知栏就直接显示出来,过几秒就会消失。 只不过Activity上像鼻涕一样流下来一个悬挂在顶部的通知,我们常用的微信就包含了这种通知。如图:

这里写图片描述

按照我写的Demo,先来看下视图文件:

这里写图片描述
视图很简单,就三个按钮,点击会出现对应的通知,由于布局太简单了,不上代码了,可以底部下载Demo查看。
要创建一个Notification很简单,稍看一下文档就知道,用一个Builder就可以构造出一个通知,我们在onCreate之前初始化:

    private NotificationManager notificationManager;

    private Notification.Builder builder;
    private Intent mIntent;
    private PendingIntent pendingIntent;
在实现各种创建的时候,偷了一个懒:
//公共的属性都写到了这里避免代码重复
        builder = new Notification.Builder(this);//创建builder对象
        //指定点击通知后的动作,此处跳到我的博客
        mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://blog.csdn.net/u012552275"));
        pendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0);
        builder.setContentIntent(pendingIntent); //跳转
        builder.setSmallIcon(R.mipmap.ic_launcher);//小图标
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
        builder.setAutoCancel(true); //顾名思义,左右滑动可删除通知
        notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
之后在给builder设置各种参数,下面就是普通的通知,要调用notify。
builder.setContentTitle("普通通知");
        builder.setSubText("这是一个普通通知");
        builder.setContentText("点击上我");
        notificationManager.notify(0, builder.build());
折叠:给了一个视图,这个视图是可以自定义的,比如我们常用的酷狗的下拉菜单,里面可以有各种功能实现。
builder.setContentTitle("折叠通知(我可以被拉大哦)");
        builder.setSubText("这个折叠的通知,可以被删除");
        builder.setContentText("点击上我");
        //用RemoteViews来创建自定义Notification视图
        RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.view_fold_notification);
        Notification notification = builder.build();
        //指定展开时的视图
        notification.bigContentView = remoteViews;
        notificationManager.notify(1, notification);
悬挂:
builder.setFullScreenIntent(pendingIntent, true);


其他备注:
Notification分成了三个等级:
VISIBILITY_PRIVATE——表明只有当没有锁屏的时候会显示
VISIBILITY_PUBLIC——标明在任何情况下都会显示
VISIBILITY_SECRET——表明在pin、password等安全锁和没有锁的情况下才能够显示
在使用的时候:
builder.setVisibility(Notification.VISIBILITY_PUBLIC);

builder.setTicker("Ticker...");// 通知首次出现在通知栏时显示的内容,带动画效果
builder.setDefaults(Notification.DEFAULT_ALL);// 通知的声音,闪光和振动效果为当前用户的默认设置

    builder.setCategory(Notification.CATEGORY_EMAIL);//设置Notification显示的位置
    builder.setColor(Color.RED);//设置Notification背景颜色


另外,由于版本之间有差异性,我们需要使用:
boolean isAboveLollipop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP;
builder.setSmallIcon(isAboveLollipop ? R.mipmap.ic_launcher : R.mipmap.ic_launcher);
来对版本做出不同的设置。
对于5.0在设置小icon后发现通知栏的icon并不是我们设置的icon,而是一个纯白色的图标,这种情况,可以阅读这个文章:
http://www.cnblogs.com/avenwu/p/4180193.html

本文Demo下载地址:
http://download.csdn.net/detail/u012552275/9634661

放上官网的说明:
https://developer.android.com/training/notify-user/index.html


请支持我,扫描左侧二维码打赏,谢谢。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页