Chinaunix首页 | 论坛 | 博客
  • 博客访问: 459741
  • 博文数量: 155
  • 博客积分: 2954
  • 博客等级: 少校
  • 技术积分: 1000
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-12 22:00
文章分类

全部博文(155)

文章存档

2014年(2)

2013年(5)

2012年(10)

2011年(33)

2010年(105)

我的朋友

分类: 嵌入式

2010-12-24 09:23:14

在Android中,基本的Notification就是有事件发生的时候在屏幕顶端的Notification bar上显示一个图标。然后拉下Notification bar,点击Notification的项目,会调用相应的程序做处理。比如有新短信,就会出现短信的图标,拉下Notification bar,点击图标会调用短信查看程序。

 

我们先看一下Notification的Sample Code,然后逐行做解说,大致能了解它的基本构成。

 

 

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;

...

private void showNotification(Message msg, int id) {
NotificationManager notiManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.notiicon, msg
.getTitle(), System.currentTimeMillis());
notification.flags = Notification.FLAG_AUTO_CANCEL;
Intent intent = new Intent(this, MainActivity.class);
Bundle bundle = new Bundle();
bundle.putString("info", msg.getInfo());
intent.putExtras(bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent contentIntent = PendingIntent.getActivity(this, id,
intent, PendingIntent.FLAG_UPDATE_CURRENT);

notification.setLatestEventInfo(this, msg.getTitle(), msg.getInfo(),
contentIntent);
notiManager.notify(id, notification);
}

 

 

首先导入三个类,Notification,NotificationManager,PendingIntent。 值得一提的是PendingIntent,它可以看做是Intent这封信的一个信封。PendingIntent基本上是Intent的包装 和描述,对象收到PendingIntent后,可以得到其中的Intent再发出去。

 

NotificationManager notiManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

上面这一句,从系统中获得Notification服务,getSystemService()就是这么用,来获得系统服务的。

 

Notification notification = new Notification(R.drawable.notiicon, msg
.getTitle(), System.currentTimeMillis());
notification.flags = Notification.FLAG_AUTO_CANCEL;

 

然后是构造一个Notification,包括三个属性,图标,图标后面的文字,以及Notification时间部分显示出来的时间, 通常使用当前时间。FLAG_AUTO_CANCEL说明Notification点击一次就消失。

 

Intent intent = new Intent(this, MainActivity.class);
Bundle bundle = new Bundle();
bundle.putString("info", msg.getInfo());
intent.putExtras(bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);

 

上面这部分Code,构造一个Intent,并且放进去一条信息。 FLAG_ACTIVITY_CLEAR_TOP, FLAG_ACTIVITY_NEW_TASK者两个FLAG表示优先寻找已经打开的应用,如果应用没有打开那么启动它。

 

PendingIntent contentIntent = PendingIntent.getActivity(this, id,
intent, PendingIntent.FLAG_UPDATE_CURRENT);

这一句代码把Intent包装在PendingIntent里,this是Context,id是PendingIntent的标志,如 果id相同会被认为是一个。FLAG_UPDATE_CURRENT是指后来的PendingIntent会更新前面的。

 

notification.setLatestEventInfo(this, msg.getTitle(), msg.getInfo(),
contentIntent);
notiManager.notify(id, notification);

最后这两行添加状态栏的详细信息,包装PendingIntent给Notification,最后发送Notification。

阅读(1251) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~