一、先介绍基本使用方法

第一步:我们要继承BroadcastReceiver类,实现自己的BroadcastReceiver。
private class DataRefreshRecieve extends BroadcastReceiver{@Override
    public void onReceive(Context context, Intent intent) {if ("com.yiyo.stb".equals(intent.getAction())){stbDataRefresh();
            dissDialog();
        }}
}

第二步:.注册receiver

在 AndroidManifest.xml 中注册

< receiver android:name = ".MyBroadcastReceiver" >      < intent-filter android:priority = "1000" >  < action android:name = "com.yiyo.stb" />           </ intent-filter >     </ receiver > 

代码中注册

IntentFilter intentFilter = new IntentFilter( "com.yiyo.stb" );
registerReceiver( mBatteryInfoReceiver , intentFilter); 

第三步:发送广播

Intent intent=new Intent();
intent.setAction("com.yiyo.stb");
sendBroadcast(intent);

第四步:

实现onReceive方法(在方法里做相应操作)

private class DataRefreshRecieve extends BroadcastReceiver{@Override
    public void onReceive(Context context, Intent intent) {if ("com.yiyo.stb".equals(intent.getAction())){stbDataRefresh();
            dissDialog();
        }}
}

二、Broadcast简介

在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。

生命周期:



三、注意事项

1、生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报错 。每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应 . 所以在 BroadcastReceiver 里不能做一些比较耗时的操作 , 否侧会弹出 ANR(Application No Response) 的对话框

2、这里不能使用子线程来解决 , 因为 BroadcastReceiver 的生命周期很短 , 子线程可能还没有结束BroadcastReceiver 就先结束了 .BroadcastReceiver 一旦结束 , 此时 BroadcastReceiver 的 所在进程很容易在系统需要内存时被优先杀死 , 因为它属于空进程 ( 没有任何活动组件的进程 ). 如果它的宿主进程被杀死 , 那么正在工作的子线程也会被杀死 . 所以采用子线程来解决是不可靠的 .

3、如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由 Service 来完成

四、广播的类型

1、普通广播 (Normal broadcasts):发送一个广播,所以监听该广播的广播接收者都可以监听到该广播。

2、有序广播 (Ordered broadcasts):按照接收者的优先级顺序接收广播 , 优先级别在 intent-filter 中的 priority 中声明 ,-1000 到 1000 之间 , 值越大 , 优先级越高 . 可以终止广播意图的继续传播 . 接收者可以篡改内容 .

五、两种广播发送和接收

1、普通广播不再介绍

2、有序广播(Ordered Broadcast)发送和接收

  • sendOrderedBroadcast(intent, null);

    • this.sendOrderedBroadcast(new Intent("android.provier.zhongnan.broadcast"), "xzq.zhongnan.test");

      代码中与上述例子最大的差别在于MainActivity中发送广播的代码: this.sendOrderedBroadcast(new Intent(

      "android.provier.zhongnan.broadcast"), "xzq.zhongnan.test")增加了自定义的一个权限。

      AndroidManifest文件中配置自定义的权限:

      <permission android:protectionLevel="normal" android:name="xzq.zhongnan.test"></permission>

  • 中断广播,不再往下发放abortBroadcast();

3、粘性sendStickyBroadcast

  • 它将发出的广播保存起来,一旦发现有人注册这条广播,则立即能接收到

    • 发这个广播需要权限<uses-permission android:name="android.permission.BROADCAST_STICKY" />

      去掉是用这个方法removeStickyBroadcast(intent); 但别忘了在执行这个方法的应用里面 AndroidManifest.xml 同样要加上面的权限; mContext.sendStickyBroadcast(intent);

六、中断广播(有序广播中可操作)

  • abortBroadcast()可中断广播,后面就不会收到广播,sendOrderedBroadcast()中若第三个参数赋值ResultReceiver,      还是会收到广播,始终都是最后一个接收到

七、广播权限

  • a、发送端要求接收端的权限(要求接收者必须有权限)
        接收端必须持有发送端的权限才可以接收这个广播
        <permission/>声明权限---在发送端声明这个权限
        <uses-permission/>使用权限---在接收端使用这个权限才可以收到广播
    b、接收端要求发送端的权限
        在<receiver/>标签中指定android:permission=""权限,发送端必须有这个权限,接收端才会接收它的广播;若无权限,接收端不接收广播

Android广播机制Broadcast详解相关推荐

  1. Android 广播机制---BroadCast

    在android下,要想接受广播信息,那么这个广播接收器就得我们自己来实现了,我们可以继承BroadcastReceiver,就可以有一个广播接受器了.有个接受器还不够,我们还得重写Broadcast ...

  2. Android Loader机制全面详解及源码浅析

    原文出处:csdn@工匠若水,http://blog.csdn.net/yanbober/article/details/48861457 一.概述 在Android中任何耗时的操作都不能放在UI主线 ...

  3. Android广播机制:Broadcast

    转载:Android总结篇系列:Android广播机制 1.Android广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广 ...

  4. Android 广播机制详解

    一.广播的简介 首先,当我们一听到广播这个词时.就可以想到小学是教室的广播.不错Android中的广播机制与我们生活中的广播是有异曲同工之妙的.Android中的发送广播也就像广播室播广播,可以让很多 ...

  5. Android NFC卡实例详解

    Android NFC卡实例详解 公司最近在做一个NFC卡片的工程,经过几天的时间,终于写了一个Demo出来,在此记录下在此过程中遇到的问题.由于之前本人是做iOS的,Android写起来并不是那么的 ...

  6. Android应用坐标系统全面详解

    Android应用坐标系统全面详解 原文链接:CSDN@工匠若水,http://blog.csdn.net/yanbober/article/details/50419117 1. 背景 去年有很多人 ...

  7. Android Gradle 自定义Task详解二:进阶

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78523958 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  8. Android Gradle 自定义Task 详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 系列目录 Android Gradle使用 ...

  9. android ------- 开发者的 RxJava 详解

    在正文开始之前的最后,放上 GitHub 链接和引入依赖的 gradle 代码: Github:  https://github.com/ReactiveX/RxJava  https://githu ...

  10. Android JNI作用及其详解

    Android JNI作用及其详解 Java Native Interface (JNI)标准是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互.JNI 是本地编程接口,它使得在 J ...

最新文章

  1. 《算法竞赛入门经典》习题——Chapter 3
  2. mysql压缩表语句_MYSQL静态表、动态表、压缩表总结
  3. 吴恩达团队发起X射线AI诊断竞赛,这家中国公司登上了榜首
  4. Grafana 使用教程 --- 开源的度量分析与可视化套件
  5. vlan跨交换机 udp广播_网络交换VLAN基础入门
  6. 进行DosBox的下载与配置
  7. 直播声音代码html,如何实现在直播中播放音频文件
  8. unbuntu 安装jdk
  9. 一分钟了解什么是代理ip和api接口
  10. SAP总账科目增强写入客商(BAPI导入)
  11. 牛牛的闹钟--网易2019实习生招聘编程题
  12. 超越“虚拟的美丽”——云计算实践再分析
  13. 当你同事工作出色时,如何得体地告知他上司
  14. 解决PCB焊盘堵,PCB通孔的方法(个人总结)
  15. PHP关于实现腾讯云直播的推流和拉流
  16. 嵌入式c程序易错点(转自http://blog.csdn.net/zhzht19861011/article/details/45508029)
  17. 不要再这样做shopee虾皮跨境电商,不然有苦说不出
  18. 数学建模——非线性规划
  19. yolo-v2 翻译
  20. 图形学知识基础:向量

热门文章

  1. matlab绘制s域零极点分布图,《信号与系统》第五章 连续系统的s域分析.ppt
  2. 8086CPU寄存器全称
  3. Unity Shader - Shader Compilation Target Levels 着色器编译目标级别
  4. eclipse中项目运行时报错之 Compilation error解决方法
  5. 【热血传奇】 添加新地图
  6. 嫡权法赋权法_客观赋权法的使用
  7. 鬼谷八荒逆天改命存档
  8. pytest之parameterize参数化
  9. 10年的工作经验?还是1个经验反复用了10年?
  10. 网友吐槽12306网站 专家:已接近技术极限