Notification在日常开发中是会经常遇到的,而在5.0之后,又发生了一些微妙的变化:在设置小icon后发现通知栏的icon并不是我们设置的icon,而是一个纯白色的图标。本文将带你介绍Notification的使用方法。
当新的通知被发布或删除,或它们的次序改变的时候,从系统接收呼叫的服务。大概可以这样翻译,很难理解是吧,那我们不需要按照它的意思来,我们就把它翻译为一个通知,就可以了。下拉状态栏后会显示完整的信息。当用户点击这个 notification 时,系统就会处理创建 notification 是传入的 Intent(通常是启动一个 Activity).你也可以给你的notification添加声音、震动、闪光灯功能。当后台服务需要提示用户来响应某个事件时,应该使用状态栏通知。后台服务不应该自己去启动一个 activity 来与用户互动,它应该创建一个状态栏通知,当用户选择这个通知时再去启动 activity。继承关系如图:
感兴趣的同学可以http://www.android-doc.com/reference/android/app/Notification.html自己研究。
一般Notification分为三类,普通、折叠、悬挂三种:
普通:在状态栏显示一个图标,下拉通知栏,会看到一个图标和详情,如图:
折叠:在状态栏显示一个图标,并且有两种视图,一种是普通视图,另一种可以展开视图。如图:
悬挂:当前操作不会打断,焦点不变,不需要下拉通知栏就直接显示出来,过几秒就会消失。 只不过Activity上像鼻涕一样流下来一个悬挂在顶部的通知,我们常用的微信就包含了这种通知。如图:
按照我写的Demo,先来看下视图文件:
![这里写图片描述](http://img.blog.csdn.net/20160920112206624)
视图很简单,就三个按钮,点击会出现对应的通知,由于布局太简单了,不上代码了,可以底部下载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之后系统代码发生了哪些变化,感兴趣的可以阅读这个文章:
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
作者:u012552275 发表于2016/9/20 12:20:30 原文链接
阅读:144 评论:0 查看评论