精通android之Broadcast Receiver
2011-07-21 10:11
363 查看
什么是Broadcast
在android中,通过广播(broadcast)可以通知其他广播接受者某个事件发生了。比如电源不足,信号不好等。首先,我们看一个简单的demo,该demo实现了一个自定义broadcast。发送端这个activity中创建了一个按钮,当按钮被按下的时候通过sendBroadcast()发送一个broadcast。
public class BroadcastTest extends Activity { public static final String NEW_LIFEFROM_DETECTED = “com.android.broadcasttest.NEW_LIFEFROM”; public void onCreate(Bundle savedInstanceState) { Button btn0 = (Button)findViewById(R.id.btn0); btn0.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent it = new Intent(NEW_LIFEFROM_DETECTED); sendBroadcast(it); } }); } }
接收端在onReceive()中实现了当接收到broadcast所做的动作。
Public class MyBroadcastReceiver extends BroadcastReceiver { // TODO Public void onReceive(Context context, Intene intent){ ...... } }
在receiver的action中定义了该receiver能够接受的广播,Manifest.xml定义部分:
<receiver android:name=”.MyBroadcastReceiver”> <intent-filter> <action android:name=”com.android.broadcasttest.NEW_LIFEFROM” /> </intent-filter> </receiver>
Android中是如何实现Broadcast机制
Broadcast机制是基于一种注册方式的,Broadcast Receiver将其特征描述并注册在系统中。根据注册时机,可以分为两类,网上有人称之为冷注册和热注册。冷注册,就是Broadcast Receiver的相关信息写在配置文件中,系统会负责在相关事件发生的时候及时通知到该Broadcast Receiver。这种模式适合于这样的场景:某事件发生 -> 通知Broadcast -> 启动相关处理应用。比如,监听来电、邮件、短信之类的,都隶属于这种模式。
热注册,顾名思义,注册这样的事情都是由应用自己来处理的,通常是在OnResume事件中通过registerReceiver进行注册,在OnPause等事件中通过unregisterReceiver反注册,通过这种方式使其能够在运行期间保持对相关事件的关注。比如,一款优秀的词典软件,可能会有在运行期间关注网络状况变化的需求,使其可以在有廉价网络的时候优先使用网络查询词汇,在其他情况下,首先通过本地词库来查词。而这样的监听,只需要在其工作状态下保持就好,不运行的时候,管你是天大的网路变化,与我何干。其模式可以归结为:启动应用 -> 监听事件 -> 发生时进行处理。
前面的Demo中用的就是冷注册。热注册的code如下:
OnCreate时,声明一个BroadcastReceiver。
BroadcastReceiver mReceiver=new BroadcastReceiver(){ Public void onReceive(Context context,Intent intent){ //收到Broadcast会跑到这里 } }OnResume时,通过registerReceiver注册。
IntentFilter mfilter=new IntentFilter(); mfilter.addAction(Intent.ACTION_SCREEN_OFF);//后附上常见的Action registerReceiver(mReceiver,mfilter);
OnPause时,通过unregisterReceiver反注册。unregisterReceiver(mReceiver);
除了接收消息的一方有多种模式,发送者也有很重要的选择权。通常,发送者有两类:
系统本身,Android定义了一组的Standard Broadcast Actions,称为系统Broadcast消息,参考http://androidappdocs.appspot.com/reference/android/content/Intent.html。自定义应用通过的接口Context.sendBroadcast或Context.sendOrderedBroadcast也可以发送Broadcast。前者发出的称为Normal broadcast,所有关注该消息的Receiver,都有机会获得并进行处理;后者放出的称作Ordered broadcasts,顾名思义,接受者需要按资排辈,排在后面的能否收到广播,需要看前面的处理方式。
需要注意的是,当Broadcast Receiver接收到相关的消息,在OnReceive中不要执行很消耗时间的操作,通常把消耗时间的操作放到一个Service中,在OnReceive中启动该Service。
后记:
一些常用的Action:ACTION_CALL activity 启动一个电话.
ACTION_EDIT activity 显示用户编辑的数据.
ACTION_MAIN activity 作为Task中第一个Activity启动
ACTION_SYNC activity 同步手机与数据服务器上的数据.
ACTION_BATTERY_LOW broadcast receiver 电池电量过低警告.
ACTION_HEADSET_PLUG broadcast receiver 插拔耳机警告
ACTION_SCREEN_ON broadcast receiver 屏幕变亮警告.
ACTION_TIMEZONE_CHANGED broadcast receiver 改变时区警告.
相关文章推荐
- Android 实时网路监测类 步骤一(NetWorkBroadcastReceiver 注册广播)
- Android实现闹钟,通过AlarmManager+BroadcastReceiver(广播)
- Android中的BroadcastReceiver设置permission
- android BroadcastReceiver 使用小结
- Android开发之BroadcastReceiver
- Android实训课程之三 这次课老师先是提到了Android有四大组件:Activity、Service、Broadcast Receiver、Content Provider。然后重点提到Acti
- Android组件--触发器组件Broadcast Receiver
- Android组件间通信机解耦——Android EventBus和Otto框架一、前言 传统的事件传递方式包括:Handler、BroadCastReceiver、Interface 回调,相比之
- android之BroadcastReceiver应用实列(耳机按键切换下一首音乐)
- Android基础之BroadcastReceiver(待完善)
- Android之BroadcastReceiver
- Android系统常用广播接收者BroadcastReceiver
- Android四大组件之Broadcast(广播接收BroadcastReceiver)
- android 6.28 第一行代码第5.5节broadcastBestreceiver
- Android提高篇1 之 BroadcastReceiver 应用程序间通信的手段
- Android BroadcastReceiver之短信拦截(黑名单)
- Android两种方式监听短信内容---BroadcastReceiver和ContentObserver
- Android四大组件之BroadcastReceiver(广播)简单总结
- Android开发(41) android的BroadcastReceiver运用详解
- Android四大组件之一:BroadcastReceiver(广播接收者)