一. Notification的介绍布局
普通视图:
ui
Content title 标题this
Large icon 大图标 (若是不设置,这小图标会自动应用到大图标上)spa
Content text 内容code
Content info 显示有多少条信息对象
Small icon 小图标事件
Time 时间 能够调用 setWhen() 设置,若是为默认的话,则是系统默认时间(通常不用设置就是系统默认时间)get
大视图:string
大视图只比普通视图多了一个7it
注意:在设置Notification 时 1 ,3 ,5 这三个属性是不可省略的
肯定进度的进度条通知:
不肯定进度的进度条通知:
自定义视图的通知:
二 . 建立普通视图的Notification
建立一个Notification 首先须要用到两个包:Notification 或V4包中的 NotificationCompat 和 NotificationManager(消息管理器)
1.新建一个Notification对象
之前的方法是直接 new Notification(); 如今通常用 Notification 中的一个内部静态类 Notification.Builder
NotificationCompat.Builder builder = new NotificationCompat.Builder(this); 这里用的是 v4 中的类,有助于程序向下兼容
2.设置Notification的属性
builder.setContentTitle("新的短消息") //设置通知标题
.setContentText("晚上的课你还上不上?") //设置内容
.setSmallIcon(R.drawable.ofm_feedback_icon) //设置小图标,若是不设置大图标那么,小图标就会变成大图标
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) //设置大图标
.setNumber(5) //通知的数据 ,即上图中的第5项
.setSound(Uri.parse("/storage/sdcard0/ttpod/song/bb.mp3")) //设置声音
.setVibrate(new long[]{0,400,200,500}) //设置震动,{不震动的时间,震动持续时间,不震动的时间,震动持续时间。。。}
.setTicker("你有新的短消息") //如图通知发送后会先在 这个位置弹出Ticker和小图标
.setDefaults(Notification.DEFAULT_ALL) //设置默认的声音,闪光灯,震动 , 就是用系统默认的设置
.setOngoing(true); //设置是否为常驻通知,若是是则用户手动是没法清除的,必须由程序清除,好比关闭程序时自动清除
.setAutoCancel(true); //设置为自动清除,若是设置了单击通知事件的话;即单击通知后,通知会自动清除,前提是设置了通知的点击事件
3.为通知设置点击后的事件
这里要用到一个类:PendingIntent 它其中封装的是一个延迟的Intent
首先建立一个 Intent 对象 :Intent intent = new Intent(this,MainActivity2.class);
而后获取一个PendingIntent 对象并将Intent传入 :
PendingIntent pi = PendingIntent.getActivity(this,3,intent,PendingIntent.FLAG_UPDATE_CURRENT);
//这里getActivity表示获取的是一个能够开启一个Activity的 PendingIntent ,还能够getBroadcast,getService
builder.setContentIntent(pi); 将PendingIntent设置进去
4.获取通知管理器NotificationManager
通知管理器是系统提供的,所以不管在什么时候何地获取的NotificationManager对象都是同一个对象
获取NotificationManager :
NotificationManager notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
NotificationManager的主要方法:
notify(int id,Notification n) 发送一个通知,并为其添加一个id
cancel(String tag,int id) 清除一个通知,经过id,tag 是一个标记能够不用写
cancelAll(); 清除全部的通知
Notification n = builder.build(); 经过builder 获取Notification对象
notificationManager.notify(5,n) 发送通知
三.建立大视图的Notification
若是要设置大视图的Notification 只需将如下代码加入上诉步奏便可
注意:大视图 只有在Android 4.1 版本之后才支持(4.1也不支持)
//设置宽视图内容
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); 获取大视图风格
String[] events = {"string","string","string"}; 大视图的内容
for (int i=0;i<events.length;i++){
inboxStyle.addLine(events[i]); 将内容分行添加
}
builder.setStyle(inboxStyle); 设置风格
四.建立肯定进度的进度条的Notification
进度条通知就是不断的发送Id相同的通知,不断的更新这个通知,若是id相同的话会覆盖上一个通知
其余步奏和普通视图是同样的只要 添加一个 set.Progress(int i, int j , boolean b);
i 表示总进度,j表示当前进度,b 表示是否为不肯定的进度条模式
下图是模拟下载进度条通知:
五.建立不肯定进度的进度条通知
其余步奏和普通视图同样,只需添加这个属性便可
builder.setProgress(0,0,true);
六.建立自定义视图的通知
自定义视图须要用到一个远程视图类:RemoteViews
首先建立一个布局文件,做为通知的布局,注意高度不能超过256dp
而后建立RemoteViews 并将 本身的布局传入
再用builder.setContent(RemoteViews r); 将RemoteViews 设置进去
在自定义视图中 setContentTitle() 和 setContentText() 都不起做用