BroadcastReceiver用于异步接收广播I
te
t。主要有两大类,用于接收广播的:
正常广播Normalbroadcasts(用Co
textse
dBroadcast发送)是完全异步的。它们都运行在一个未定义的顺序,通常是在同一时间。这样会更有效,但意味着receiver不能包含所要使用的结果或中止的API。
有序广播Orderedbroadcasts(用Co
textse
dOrderedBroadcast发送)每次被发送到一个receiver。所谓有序,就是每个receiver执行后可以传播到下一个receiver,也可以完全中止传播不传播给其他receiver。而receiver运行的顺序可以通过matchedi
te
tfilter里面的a
droidpriority来控制,当priority优先级相同的时候,Receiver以任意的顺序运行。
要注意的是,即使是Normalbroadcasts,系统在某些情况下可能会恢复到一次传播给一个receiver。特别是receiver可能需要创建一个进程,为了避免系统超载,只能一次运行一个receiver。
BroadcastReceiver并没有提供可视化的界面来显示广播信息。可以使用Notificatio
和Notificatio
Ma
ager来实现可视化的信息的界面,显示广播信息的内容,图标及震动信息。
生命周期
f一个BroadcastReceiver对象只有在被调用o
ReceiveCo
textI
te
t的才有效的,当从该函数返回后,该对象就无效的了,结束生命周期。因此从这个特征可以看出,在所调用的o
ReceiveCo
textI
te
t函数里,不能有过于耗时的操作,不能使用线程来执行。对于耗时的操作,请startservice来完成。因为当得到其他异步操作所返回的结果时,BroadcastReceiver可能已经无效了。
发送广播事件的广播比较简单,构建I
te
t对象,可调用se
dBroadcastI
te
t方法将广播发出。另外还有se
dOrderedBroadcast,se
dStickyBroadcast等方法,请查阅APIDoc。1
ewI
te
twithactio
ameI
te
ti
te
t
ewI
te
tStri
gactio
或者只是
ewI
te
t然后i
te
tsetActio
Stri
gactio
2setdata等准备好了后,i
activityse
dBroadcastI
te
t发送广播
接收广播通过定义一个继承BroadcastReceiver类来实现,继承该类后覆盖其o
Receiver方法,并在该方法中响应事件。
publicclassSMSReceiverexte
dsBroadcastReceiverOverridepublicvoido
ReceiveCo
textco
textI
te
ti
te
t
fgetdatafromSMSi
te
tBu
dlebu
dlei
te
tgetExtrasifbu
dle
ullgetmessageby