一. Notification的介绍
普通视图:
Content title 标题
Large icon 大图标 (如果不设置,这小图标会自动应用到大图标上)
Content text 内容
Content info 显示有多少条信息
Small icon 小图标
Time 时间 可以调用 setWhen() 设置,如果为默认的话,则是系统默认时间(一般不用设置就是系统默认时间)
大视图:
大视图只比普通视图多了一个7
注意:在设置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() 都不起作用