一、相关概念
1、BroadcastReceiver
BroadcastReceiver是全局监听器,用于监听系统全局的广播消息,可以方便的实现系统中不同组件之间的通信
2、BroadcastReceiver的生命周期
与Service、Activity具有完整的生命周期不同,BroadcastReceiver本质上只是一个系统级的监听器,负责监听各程序所发出的Broadcast。
3、BroadcastReceiver的编码实现方式
a、编写类,继承BroadcastReceiver
b、AndroidManifest.xml中配置receiver ,此时自动完成注册;手动注册,使用registerReceiver()
c、调用BroadcastReceiver:
sendBroadcast(intent) 或者 sendOrderedBroadcast(intent2, null)
4、有序广播
普通广播:
普通广播是完全异步的,可以在逻辑上的同一时刻被所有接受者接收到,消息传递的效率很高。但缺点是接受者不能将处理结果传递给下一个接受者,并且无法终止BroadcastReceiver Intent的传播。
有序广播:
Ordered Broadcast的接收者按照预先声明的优先级依次接收Broadcast。
优先级 -1000到1000,数值越大优先级越高,在xml中通过priority或者编码setPriority设置;
通过sendOrderedBroadcast(intent2, null)启动有序广播;
在前一个BroadcastReceiver中设置处理结果通过setResultExtras(bundle)实现;
在后一个BroadcastReceiver中,通过Bundle bundle=getResultExtras(true);获取前面的处理结果;
通过abortBroadcast();取消继续广播
二、编码实现
activity中定义按钮点击事件,点击时发送广播 @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.btn_broad0: Intent intent=new Intent("com.example.receiver.MyBroadcastReceiver"); intent.putExtra("data", "我是数据"+new Date().toLocaleString()); sendBroadcast(intent); break; case R.id.btn_broad1: Intent intent2=new Intent("com.example.receiver.MyOrderedReceiver"); intent2.putExtra("data", "我是数据"+new Date().toLocaleString()); sendOrderedBroadcast(intent2, null); break; default: break; } }
普通广播接收 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,intent.getExtras().getString("data").toString(), Toast.LENGTH_SHORT).show(); } }
有序广播接收者1 public class MyOrderedReceiver1 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Bundle bundle=intent.getExtras(); Toast.makeText(context, "receiver1"+bundle.getString("data").toString(), Toast.LENGTH_SHORT).show(); bundle=new Bundle(); bundle.putString("data2", "我是新数据"); //设置处理结果数据,级别低的BroadcastReceiver可以接收 setResultExtras(bundle); } }
有序广播接收者2 public class MyOrderedReceiver2 extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //获取前面BroadcastReceiver的处理结果 Bundle bundle=getResultExtras(true); Toast.makeText(context, "receiver2"+bundle.getString("data2").toString(), Toast.LENGTH_SHORT).show(); abortBroadcast();//取消继续广播 } }
<receiver android:name="com.example.receiver.MyBroadcastReceiver" > <intent-filter> <action android:name="com.example.receiver.MyBroadcastReceiver" /> </intent-filter> </receiver> <receiver android:name="com.example.receiver.MyOrderedReceiver1" > <intent-filter android:priority="10"> <action android:name="com.example.receiver.MyOrderedReceiver" /> </intent-filter> </receiver> <receiver android:name="com.example.receiver.MyOrderedReceiver2" > <intent-filter android:priority="1"> <action android:name="com.example.receiver.MyOrderedReceiver" /> </intent-filter> </receiver>
相关推荐
Android-BroadcastReceiver高级应用,详细参见博客:http://www.cnblogs.com/plokmju/p/android_SystemBroadcastReceriver.html
介绍了andorid四大组件之一的BroadcastReceiver
NULL 博文链接:https://jiangnanlove.iteye.com/blog/1333335
广播接收器-BroadcastReceiver 电池电量显示
有序广播的拦截、有序广播的篡改、管理呼出电话的例子。原博客地址:https://blog.csdn.net/u010356768/article/details/79908724、https://blog.csdn.net/u010356768/article/details/79913165、 ...
BroadcastReceiver最基础之短信收发应用.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
将一个BroadcastReceiver转成一个Observable
Android自学笔记-17-广播接收者(BroadcastReceiver)
Intent和BroadcastReceiver示例代码
Android学习之BroadcastReceiver总结
Android BroadcastReceiver
这是一个关于Android中四大组件之一 —— BroadcastReceiver,即广播的一个demo,里面涉及到BroadcastReceiver的两种注册方式,也简单的实现了广播,通过点击按钮发送广播,收到广播后打印日志。
Android程序技术:BroadcastReceiver.pptx
Android下BroadcastReceiver的简单示例。详见博客:http://www.cnblogs.com/plokmju/p/android_BroadcastReceiver.html
android BroadcastReceiver 源码 学习
图像上载-BroadCastReceiver 正在监听用户使用相机(照片)的所有事件的应用程序。 用户捕获照片后,该照片即被上传到服务器。后端在后端文件夹中接收图像的服务器的代码。
Android \BroadCastReceiver 最全的简介
NativeScript BroadcastReceiver演示 本机脚本v5.4.0 该演示提供了具有Webpack支持的JavaProxy的示例 必须启用电话权限才能进行测试。 纱线安装tns构建android --bundle或tns运行android --bundle
ANDROID---当网络发生变化时使用BroadcastReceiver和service通知 博客地址:http://blog.csdn.net/zhang58246500/article/details/51536350
android服务自启动Service以及BroadcastReceiver和Notification.zip