Android的大局通知机制

Android的全局通知机制

Android的全局通知机制

Android提醒主要有2种形式:Toast和状态栏通知。

Toast,弹出式通知,临时弹出的通知界面,不会阻塞用户正在进行的交互,仅仅在界面上停留一段时间自动消失。常用于提供一些反馈消息。

另一种方式是状态栏通知。所有的通知都会以图标的形式在状态栏显示,用户可以通过通知栏上下拉,看到一份完整的状态栏通知列表,其中包含了各个状态栏通知的内容,并可与之做一定的交互。

 

“基于全局”的意思是:所有的通知项都有Android统一调度,控制其生命周期和样式。Android有一个通知服务NotificationManagerService,运行在核心进程的独立线程,当开发者发出一个Toast通知,会加入到通知服务的Toast队列中,在每个队列中的Toast通知都会按照先后顺序逐一呈现,每个Toast可以预设显示时间,消失后,下一个Toast显示。

当状态栏通知被提交到通知服务中,通知服务会在已有的状态栏通知列表中查询是否存在于提交的通知具有相同标识的通知项,今儿进行更新、替换或者新建。

 

Toast使用

Toast类。

Toast.makeText将带有文字信息的Toast呈现在用户面前。

Toast.setgravity修改文本的展示效果,如位置信息

Toast.show展示

Toast.setDuration设置展示时间

Toast.setView(layout):自定义样式,图文形式

 

状态栏通知

状态栏通知要复杂。首先,交互界面样式复杂,具有丰富的图标和内容。其次,状态栏通知要绑定相关的事件,使用户可以与之交互,对通知内容作进一步处理。再次,状态栏通知的生命周期复杂,有多重控制模式。

状态栏交互界面由状态栏界面(图标和文字)+列表栏界面(下拉通知列表中的通知项界面)组成。使用Notification对象,可以设置这2部分的交互界面。

//初始化状态栏显示的文字和图标

Notification notification = new Notification(R.drawable.X , R.string.X , time);

//设置下拉通知栏会显示的文字信息

Notification.setLatestEventInfo(context, R.string.Xtitle, R.string.Xcontent, createPending Intent());

 

Andriod 3.0提供了Builder类,通过Notification.Builder更清晰的构建状态栏通知对象:

Notification notification =new Notification.Builder(context)

.setTicker(R.string.status_bar_notification)

.setSmallIcon(R.drawable.X)

.setContentTitle(R.string.Xtitile)

.setContentText(R.string.Xcontent)

.setContentIntent(createPending Intent())

.getNocitifaction();

 

状态栏的构造者和展示者隶属于不同的应用,需要RemoteView定制交互界面。Notification.contentView=(RemoteView) contentView

 

Android中,开发者还可以为状态栏设置闪烁(Flash LED)、震动(Vibrate)、提示音(alert sound)进一步增强提示效果。

 

状态栏的通知事件有PendingIntent实现,并绑定到通知项的异步触发。发状态栏通知需要NotificationManager.notify,他会将请求发送到NotificationManagerService