Notification即通知,用于在通知栏显示提示信息。布局
在较新的版本中(API level > 11),Notification类中的一些方法被Android声明deprecated(弃用),其实基本上至关于所有弃用了,由于这个类自己方法就少得可怜。ui
Android官方声明弃用,必定有它的理由,虽然我也不知道是什么。奈何本人轻度强迫症患者,人家都建议你不要用了,那就不要总是恪守着N年前的东西了。设计
就像是之前,一说到标签页,你们基本上都会想到TabHost配合ActivityGroup,但Android后来提倡Fragment。xml
废话说多了,仍是小结一下使用方法。下面按照建立一个通知的步骤一步一步来,同时给出新旧实现方法。事件
一、获取Notification管理器get
NotificationManager noteMng = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);it
二、新建一个Notification,设置状态栏显示样式io
private Notification note;
//API 11如下
note = new Notification(R.drawable.ico_launcher "显示于屏幕顶端状态栏的文本", System.currentTimeMillis());
//API 11及以上
Notification.Builder builder = new Notification.Builder(nowContext).setTicker("显示于屏幕顶端状态栏的文本")
.setSmallIcon(R.drawable.ic_laucher);class
API 11以上版本中,状态栏显示的样式跟下拉通知栏中显示的样式,能够一块儿设置,就是经过Notification.Builder类来实现,这里的Builder只调用了两个方法来设置状态栏显示样式。test
三、设置Notification标志位(非必要步骤)
//FLAG_ONGOING_EVENT代表有程序在运行,该Notification不可由用户清除
note.flags = Notification.FLAG_ONGOING_EVENT;
四、设置点击Notification后的触发事件
//经过Intent,使得点击Notification以后会启动新的Activity
Intent i = new Intent(nowContext, AnotherActivity.class);
//该标志位表示若是Intent要启动的Activity在栈顶,则无须建立新的实例
i.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
pendingIntent = PendingIntent.getActivity(nowContext, 100, i, PendingIntent.FLAG_UPDATE_CURRENT);
五、设置Notification在通知栏里的样式
(1)系统默认样式
//API 11如下:
note.setLatestEventInfo(nowContext, "take me to your heart", "Micheal learn to rock", pendingIntent);
//API 16及以上,build()方法要求API 16及以上
//一会API 11以上,一会API16以上,我也很想知道Android的API是怎么设计的
note = builder.setContentIntent(pendingIntent).setContentTitle("title").setContentText("text").build();
(2)自定义样式:
自定义样式,就是让Notification在通知栏显示成自定义的xml布局
应当注意的是,Notification的自定义样式,只支持如下可视组件:
FrameLayout, LinearLayout, RelativeLayout
TextView, Button, AnalogClock, ImageView, ImageButton, Chronometer, ProgressBar
RemoteView view = new RemoteView(nowActivity.getPackageName(), R.layout.note_layout);
//API 11如下
note.contentView = view;
note.contentIntent = pendingIntent;
//API 16及以上,又是build()方法致使的,汗。。
note = builder.setContent(view).setContentIntent(pendingIntent).build();
这个步骤里有一个很值得注意的地方:pendingIntent被设置为note的contentIntent的值,就意味着点击了这个通知才会触发该Intent。
那么若是只是想让自定义布局里的某个按钮触发呢?好比说,弄了一个音乐播放器,Service负责播放音乐,Notification显示当前播放进度和一些简单的暂停按钮、上一首、下一首按钮,让用户不用再打开界面就能够经过Notification上的按钮操纵音乐播放。
假设说想让自定义布局里的一个id为R.id.button1的按钮来触发这个Intent,能够以下操做:
view.setOnClickPendingIntent(R.id.button1, pendingIntent);//在上面建立RemoteView实例后加上这句
而后注意,pendingIntent已经绑定到按钮上了,上面Notificatiion实例中,设置contentIntent的语句要去掉。
六、发布该通知,第一个参数为该notification的ID
noteMng.notify(10, note);
PS:这个是我本身敲的一个txt文件,在我电脑里,可能一些变量名什么的会敲错。
可是大概步骤跟方法相信已经说清楚了。