1.获取NotificationManager,用来控制通知栏的显示。
NotificationManager nm=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
2.得到Notification对象,用来显示在通知栏
Notification notification = new Notification();
3.给Notification附加各种属性
// 设置显示在手机最上边的状态栏的图标 ,必须属性,缺了显示不出来
notification.icon = R.drawable.ic_launcher;
// 当当前的notification被放到状态栏上的时候,提示内容
notification.tickerText = "下载中...";
4.得到PendingIntent对象,PendingIntent主要用来在进程间通信,通知栏与程序不在一个进程
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
其中intent所指向的class就是点击通知栏的通知后跳转的Activity界面,如果不设置,就不跳。
5.设置把通知栏下拉后出现的界面
notification.setLatestEventInfo(this, "下载", "fedsa", pendingIntent);
界面中有1个标题、一行内容、一个图片与通知栏出现的时间。由于没设置图片,图片为默认。
6.把设置好的通知信息显示到通知栏里
nm.notify(1, notification);
其中第一个参数为这个通知的id,自定义的。同一时间这个值必须唯一。
Notification一些有用的flag与字段:
1. FLAG_AUTO_CANCEL 当用户点击通知栏时通知栏取消。
2. FLAG_INSISTENT 设置的声音会重复响,除非用户清除掉这个通知或者点击进入这个通知所指向的程序
3. FLAG_NO_CLEAR 设置了这个,通知将永不会被取消,就算clear也没用
4. FLAG_ONLY_ALERT_ONCE 设置这个能让通知每发一次就响一次设置好的声音
5. FLAG_SHOW_LIGHTS 设置了这个才能让LED亮(通知不一定只能通知消息,也能通知背光灯闪烁,播放音乐等)
1. audioStreamType 用来播放的音频类型,int类型
2. contentIntent 当点击通知栏时执行的 PendingIntent;
3. contentView RemoteViews类型,通知栏的界面
4. flags 标志位,值就设置上面的标志,不设置就是默认的设置。
5. icon 图标,状态栏里的图标。(必须有)
6. number 这个通知显示的次数
7. sound Uri类型值,要播放的声音
8. tickerText 显示在状态栏的文字(不必须)
9. when 时间戳,不设置就是now,用于显示在通知栏
10还有几个字段看不懂什么意思.......(API 8)
一般来说简单的通知栏已经能满足要求了,不过我们也可以设置一些复杂点的。
如果不满足系统提供的通知栏界面,那么可以自定义一个界面。
自定义的方法就是给contentIntent 与contentView 字段赋值,把
notification.setLatestEventInfo(this, "下载", "fedsa", pendingIntent);
这一句去掉。
RemoteViews里可以设置的View有进度条、图片、文字。
比如设置view里的文字 view.setTextViewText(R.id.tv, "下载"+progress+"%");
第一个参数是TextView的id,第二个是TextView要显示的内容。
RemoteViews的对象可以这样得到
RemoteViews view=new RemoteViews(getPackageName(),R.layout.notification_view);
如果要更新通知栏里的内容,可以nm.notify(1, notification);