广播接收者

ChaoYoung 2012-02-02

广播接受者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调用

Context.sendBroadcast(),Context.sendOrdereBroadcast()来实现。通过一个广播Intent可以被

订阅了此Intent的多个广播接受者所接收。这个特性跟JMS中的Topic消息接收者类似,

要实现一个广播接收者方法如下:

第一步:继承BroadcastReceiver,并重写onReceive()方法

第二步:订阅感兴趣的广播Intent,订阅方法有俩种:

第一种:使用代码订阅

IntentFilterfilter=newIntentFilter("android.provider.Telephony.SMS_RECEIVED");

IncomingSMSReceiverreceiver=newIncomingSMSReceiver();

receiverReceiver(receiver,filter);

第二种:在androidManifest.xml文件中的<application>节点里进行订阅

<receiverandroid:name=".IncomingSMSReceiver">

<intent-filter>

<actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>

</intent-filter>

   </receiver>

 <!-- 接受短信权限 --><uses-permission android:name="android.permission.SEND_SMS"/>

广播被分为俩种不同的类型,普通广播和有序广播,普通广播是完全异步的。可以在同一时刻被所有的接收者收到。

消息传递的效率比较高,但是缺点是:接收者不能将结果传递给下一个接收者。并且无法终止广播intent的传播。

然后有序广播是按照接收者申明的优先级别(申明在intent-filter元素的android:property属性中,数越大,

优先级别越高,取值范围-1000到1000,也可以调用IntentFilter对象的setProperty()进行设置).被接收者依次

接收广播,如:A的级别高于B,B的级别高于C,那么广播先传给A,在传给B,最后传给C,A得到广播后,可以在

广播里存入数据,当广播传给B时,B可以从广播中取出A存入的数据。

Context.sendBroadcast();

发送的是普通广播,所有订阅者都有机会获得并进行处理。

Context.sendOrderBroadcast();

发送的有序广播

接收电池电量变化广播Intent

<receiverandroid:name=".Myclass">

<intent-filter>

<actionandroid:name="android.intent.action.BATTERY_CHANGED"/>

</intent-filter>

</receiver>

接收开机启动广播

<receiverandroid:name=".MyClass">

<intent-filter>

<actionandroid:name="android.intent.action.BOOT_COMPLETED"/>

</intent-filter>

</receiver>

并且要进行权限的申明

<uses-premission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

在android中,程序的相应被活动管理器和窗口管理器这俩个系统服务所监视,当BroadcastReceiver在10秒

内没有执行完毕,android会认为该程序无响应,会弹出ANR(applicationNoresponse)对话框,所以

不执行耗时的工作

相关推荐