感谢:http://www.devdiv.com/home.php?mod=space&uid=14682&do=blog&id=3776

在android中,通过广播(broadcast)可以通知其他广播接受者某个事件发生了。比如电源强度,信号强度等。
Broadcast机制是基于一种注册方式的,Broadcast Receiver将其特征描述并注册在系统中。根据注册时机,可以分为两类,网上有人称之为静态注册和动态注册。
静态注册,就是Broadcast Receiver的相关信息写在配置文件中,系统会负责在相关事件发生的时候及时通知到该Broadcast Receiver。这种模式适合于这样的场景:某事件发生
-> 通知Broadcast -> 启动相关处理应用。比如,监听来电、邮件、短信之类的,都隶
属于这种模式。 这个方式实现如下:
(1)接收广播
Public class MyBroadcastReceiver extends BroadcastReceiver { Public void onReceive(Context context, Intene intent){ // TODO}

(2)发送广播
 Intent it = new Intent(NEW_BROADCAST_FILTER); sendBroadcast(it);


(3)配置广播
在receiver的action中定义了该receiver能够接受的广播,Manifest.xml定义部分:
<receiver android:name=”.MyBroadcastReceiver”> <intent-filter><action android:name= NEW_BROADCAST_FILTER /></intent-filter></receiver>


动态注册,注册这样的事情都是由应用自己来处理的,通常是在OnResume事
件中通过registerReceiver进行注册,在OnPause等事件中通过unregisterReceiver取消注
册,通过这种方式使其能够在运行期间保持对相关事件的关注。比如,判断网络变化,有些应用会在运行期间关注网络状况变化的需求,使其可以在有网络的时候优先使用网络,在其他情况下,首先通过本地数据。而这样的监听,只需要在其工作状态下保持就好,不运行的时候,管你是天大的网路变化,与我何干。其模式可以归结为:启动应用 -> 监听事件 -> 发生时进行处理。 动态注册广播方式如下:
(1)声明一个BroadcastReceiver
BroadcastReceiver mReceiver=new BroadcastReceiver(){Public void onReceive(Context context,Intent intent){ //收到Broadcast会跑到这里         }}

(2) OnResume时,通过registerReceiver注册。
IntentFilter mfilter=new IntentFilter();mfilter.addAction(NEW_BROADCAST_FILTER);registerReceiver(mReceiver,mfilter);

(3)OnPause时,通过unregisterReceiver反注册。
unregisterReceiver(mReceiver);

android中发送广播有两种方式,Context.sendBroadcast和Context.sendOrderedBroadcast,前者发出的称为Normal broadcast,所有关注该消息的Receiver,都有机会获得并进行处理;后者放出的称作Ordered broadcasts,顾名思义,接受者需要按资排辈,排在后面的能否收到广播,需要看前面的处理方式,如果前面的Receiver阻止了这个消息继续广播,排在后面的就不会在接收到这个广播,短信广播就是Ordered broadcasts。
<receiver android:name=".SmsReceiver">       <intent-filter android:priority="1999">            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>         </intent-filter></receiver>

Ordered broadcasts根据priority值确定优先级,值越大优先级越高,如果你的短信程序中priority最大,接收到短息广播后阻止了其继续广播,就达到了拦截短信的效果。
最后需要注意的是,当Broadcast Receiver接收到相关的消息,在OnReceive中不要执行很消耗时间(通常不大于5秒)的操作,通常把消耗时间的操作放到一个Service中,在OnReceive中启动该Service。

更多相关文章

  1. Android 短信模块分析(二) MMS中四大组件核心功能详解
  2. Android短信编解码方式
  3. Android之View和ViewGroup事件分发
  4. Android 事件触发机制的深入学习
  5. Android ViewGroup 触摸屏事件派发机制和源码分析
  6. android如何静默方式来安装apk
  7. Android属性动画之XML定义方式
  8. Android触摸事件的传递(四-1)--输入系统-InputReader
  9. Android 4.x 获取存储卡路径的方式

随机推荐

  1. Android 动画——Layout Animations布局
  2. 图解Android:Touch事件传递机制
  3. 控件_ProgressBar
  4. Android(安卓)中 BroadcastReceiver以及
  5. Camera.Parameters android相机参数
  6. Android TextView设置阴影效果
  7. Android(安卓)UI规范,就这么不受待见吗?
  8. Android 自定义View实现直播点赞特效
  9. Java环境变量和Android环境变量
  10. Binder系列1—Binder Driver初探