Study-android BroadcastReceiver总结
来源:互联网 发布:淘宝怎样充话费 编辑:程序博客网 时间:2024/06/05 14:08
* 一、简单介绍 BroadcastReceiver 也就是广播接收者,它就是用来接收来自系统和应用中的广播。
* 应用的UI界面需要随着后台事物的进度而实时显示。目前我就接触了两种办法。一个是通过Handler,
* 发送消息通知UI界面更新。另外一个就是通过发送自己定义的广播, UI界面的Activity里面定义 自己的
* BroadcastReceiver并且去更新。例如服务器正在播放音乐,自动播放下一首的时候我们可
* 以发送一个广播,在UI界面接收这个广播,并且等待广播的内容(正在播放的音乐曲目),然后就可以更新UI显示正确的播放曲目。
*
* 其实 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能,
* 当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作,当电池电量改变时,系统会产生一条广播,
* 接收到这条广播就能在电量低时告知用户及时保存进度等等。
*
* 二、广播的使用 同代码一样定义一个BroadcastReceiver。然后需要对这个BroadcastReceiver进行注册。<br>
* 注册方式<br>
* 1:在Manifest里面注册,将是永久的,即使应用退出来,但是还是能够接受到广播,这是静态注册
* 2:如果在代码中通过register注册,则应用退出的时候可以/必须通过unregister进行解除,不会再接受广播 这是动态编译
*
* 在Mainfest注册入下,目前就使用到了 intent-filter。如果没有intent-filter的话,这个receiver是不会接收任何广播的。下面添加了3个aciton,两个是自己定义的。一个是系统的action接收信息。如果广播的是这三种action中的一种,receiver都能够接收到信息。第三个action是接收信息。主要是验证退出应用后自己给自己发送信息看能不能接收到广播。通过验证,给自己发送信息的时候。下面的FirstReceiver是接收到广播的。
<receiver android:name="com.wyd.study.receiver.FirstReceiver" > <intent-filter> <action android:name="com.wyd.study.receiver.action_TEST" /> <action android:name="com.wyd.study.receiver.action_TEST1" /> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter></receiver>
上面的类似于下面的代码。只是下面的是动态注册。退出应用后这个receviver是不能够接受到任何东西。通过验证,给自己发送信息的时候。下面的mFifthReceiver是接收到广播的。
<span style="white-space:pre"></span>IntentFilter filter = new IntentFilter();filter.addAction(ACTION_TEST);//ACTION_TEST = <span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">com.wyd.study.receiver.action_TEST</span>filter.addAction(ACTION_TEST1);filter.addAction("android.provider.Telephony.SMS_RECEIVED");registerReceiver(mFifthReceiver, filter);
发送广播的代码如下:
<span style="white-space:pre"></span>Intent intent = new Intent();intent.setAction(ACTION_TEST); //还可以在这个intent里面放数据putExtrasendBroadcast(intent);DBG.log(TAG, "SendBtn1");
每个接收者都类似下面的代码
BroadcastReceiver mFifthReceiver = new BroadcastReceiver() {private static final String TAG = "mSixthReceiver";@Overridepublic void onReceive(Context context, Intent intent) {DBG.log(TAG, DBG._FUNC_()); //通过打log知道有没有接收到广播//通过getAction()可以知道是那个广广播;因为这个recevier可能会有很多action//通过各种getExtras()可以得到广播的附带东西;
<span style="white-space:pre"></span>//可以在这里更新UI}};
三、权限控制 。如果发送广播的时候增加了权限。则应用也有有相应的权限才能够接受到广播。
intent.setAction(ACTION_TEST1);/** 加了权限控制,需要在Manifest里面增加相应的权限才能收到广播 */sendBroadcast(intent, BROADCAST_PERMISSION);Manifest定义权限如下:
<!-- 定义自己的权限 --> <permission android:name="wyd.permission.BROADCAST_PERMISSION" android:protectionLevel="normal" /> <!-- 使用这个权限 --><uses-permission android:name="wyd.permission.BROADCAST_PERMISSION" />
四、有序广播
有序广播比较特殊,它每次只发送到优先级较高的接收者那里, 然后由优先级高的接受者再传播到优先级低的接收者那里,优先级高的接收者有能力终止这个,同时我们也可以通过setResultExtras方法将一个Bundle对象设置为结果集对象, 传递到下一个接收者那里,这样以来,优先级低的接收者可以用getResultExtras获取到最新的经过处理的信息集合。也可以通过abortBroadcast()终止广播。
看下面定义的BroadcastReceiver
public class FourthReceiver extends BroadcastReceiver {private final static String TAG = "FourthReceiver";@Overridepublic void onReceive(Context context, Intent intent) {DBG.log(TAG, DBG._FUNC_());Bundle bundle = new Bundle();bundle.putString("MSG", "wangyd");setResultExtras(bundle);// 这个是把内容整理后给下一级// abortBroadcast(); //这个会终止广播到下一级}}
public class ThirdReceiver extends BroadcastReceiver {<span style="white-space:pre"></span>private final static String TAG = "ThirdReceiver";<span style="white-space:pre"></span>@Override<span style="white-space:pre"></span>public void onReceive(Context context, Intent intent) {<span style="white-space:pre"></span>DBG.log(TAG, DBG._FUNC_());<span style="white-space:pre"></span>}}
在activity里面也定义一个BroadcastReceiver
BroadcastReceiver mSixthReceiver = new BroadcastReceiver() {private static final String TAG = "mSixthReceiver";@Overridepublic void onReceive(Context context, Intent intent) {DBG.log(TAG, DBG._FUNC_());String s = getResultExtras(true).getString("MSG");DBG.log(TAG, s);}};
分别的注册信息如下
<receiver android:name="com.wyd.study.receiver.ThirdReceiver" > <intent-filter android:priority="999" > <action android:name="com.wyd.study.receiver.action_TEST2" /> </intent-filter> </receiver> <receiver android:name="com.wyd.study.receiver.FourthReceiver" > <intent-filter android:priority="998" > <action android:name="com.wyd.study.receiver.action_TEST2" /> </intent-filter> </receiver>
IntentFilter filter1 = new IntentFilter();filter1.addAction(ACTION_TEST2);filter1.setPriority(997);registerReceiver(mSixthReceiver, filter1);
现在这三个接收者的<intent-filter>多了一个android:priority属性,并且依次减小。 这个属性的范围在-1000到1000,数值越大,优先级越高。
下面发送我们的广播:
Intent intent = new Intent();intent.setAction(ACTION_TEST2);sendOrderedBroadcast(intent, BROADCAST_PERMISSION);
可以等到的结果是在先进入ThirdReceiver再进入FourthReceiver最后进入mSixthReceiver,而且在mSixthReceiver中打印了wangyd
如果在 FourthReceiver 中增加了 abortBroadcast(); 则会终止广播到下一级,mSixeReceiver 则不会接收到广播
源码下载:http://download.csdn.net/detail/yidong_wang/8975697
- Study-android BroadcastReceiver总结
- android中BroadCastReceiver总结
- Android BroadcastReceiver总结
- Android BroadcastReceiver学习总结
- Android BroadcastReceiver 广播总结
- android BroadcastReceiver 总结
- Android BroadcastReceiver学习总结
- Android总结 - BroadcastReceiver
- Android BroadcastReceiver知识点总结
- Android之BroadcastReceiver总结
- Android学习之BroadcastReceiver总结
- Android学习之BroadcastReceiver总结
- Android——BroadcastReceiver总结
- Android基础总结三:BroadcastReceiver总结一
- Android基础总结之五:BroadcastReceiver
- BroadcastReceiver简单总结(android四大组件之一)
- Android四大组件之三:BroadcastReceiver总结
- Android开发——BroadcastReceiver知识总结
- Ios后台任务运行实现
- Java系列笔记(1) - Java 类加载与初始化
- 对ORM的支持 之 8.4 集成JPA ——跟我学spring3
- Matlab R2014b安装教程
- HBase - 计数器 - 计数器的介绍以及使用 | 那伊抹微笑
- Study-android BroadcastReceiver总结
- Java自学笔记-操作符
- Java系列笔记(2) - Java RTTI和反射机制
- 总结的一些Java公用函数库
- 蓝牙调试
- HDU 1114(Piggy-Bank)完全背包
- POJ 1035 Spell checker
- Data collection is easy. Decision making is hard.
- int a[3] 和 int* a = new[3]的区别