`
_小菜鸟
  • 浏览: 34059 次
社区版块
存档分类
最新评论

我的android 第32天 - 广播接收者--BroadcastReceiver

 
阅读更多

 我的android 第32天 - 广播接收者--BroadcastReceiver

 

广播接收者(BroadcastReceiver)用于接收广播Intent,广播Intent的发送是通过调用Context.sendBroadcast()、Context.sendOrderedBroadcast()来实现的。通常一个广播Intent可以被订阅了此Intent的多个广播接收者所接收,这个特性跟JMS中的Topic消息接收者类似。

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

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

publicclass IncomingSMSReceiver extends BroadcastReceiver {

  @Override public void onReceive(Context context, Intent intent) {

  }

}

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

第一种:使用代码进行订阅(动态注册)

IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");

IncomingSMSReceiver receiver = new IncomingSMSReceiver();

registerReceiver(receiver, filter);

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

<receiverandroid:name=".IncomingSMSReceiver">

    <intent-filter>

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

    </intent-filter>

</receiver>

广播被分为两种不同的类型:“普通广播(Normalbroadcasts)”和“有序广播(Orderedbroadcasts)”。前者是完全异步的,所有接收者(逻辑上)都在同一时刻运行,对消息传递的效率而言这是很好的做法,但缺点是:接收者不能将处理结果传递给下一个接收者,并且无法终止广播Intent的传播;然而后者是逐个执行接收者——系统会按照接收者声明的优先级别(声明在intent-filter元素的android:priority属性中,数越大优先级别越高,取值范围:-10001000。也可以调用IntentFilter对象的setPriority()进行设置),按顺序逐次执行。

 

Context.sendBroadcast()

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

 

Context.sendOrderedBroadcast()

   发送的是有序广播,系统会根据接收者声明的优先级别按顺序逐个执行接收者,前面的接收者有权终止广播(BroadcastReceiver.abortBroadcast()),如果广播被前面的接收者终止,后面的接收者就再也无法获取到广播。对于有序广播,前面的接收者可以将处理结果存放进广播Intent,然后传给下一个接收者。

下载视频代码

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics