参考资料 : 基础总结篇之五:BroadcastReceiver应用详解

  BroadcastReceiver用于接收广播信息,可以通过sendBroadcast等方法进行发送。sendBroadcast、sendOrderedBroadcast、sendStickBroadcast都是android.content.ContextWrapper类的方法,而Activity和Service都继承了这个类,所有Activity和Service都可以执行发送广播的功能。

  1、BroadcastReceiver的注册方式分为静态注册和动态注册。动态注册的Receiver可以随时注册(registerReceiver)和注销(unregisterReceiver)

    • 静态注册

      • 定义自己的Receiver(MyReceiver)
      • 在Manifest中添加receiver标签
      • 在Activity或Service中sendBroadcast等方法发送广播
    • 动态注册
      • 定义自己的Receiver(MyReceiver)
      • 在Activity或Service中使用registerReceiver注册广播。声明IntentFilter对象,对receiver进行说明,相当于Manifest文件中对应的intent-filter标签
      • 在Activity或Service中sendBroadcast等方法发送广播

  2、广播方式

    • 一般广播(sendBroadcast)

      • 广播一经发出,所有接收这种action的广播都会接收到,没有办法终止。
    • 有序广播(sendOrderedBroadcast)
      • 广播发出后,会按照Receiver优先级的高低先后调用。先被调用的Receiver可以增加自己的信息传递给后面的Receiver,也可以中断Receiver的继续传递(使用abortBroadcast)。

  

    sendStickyBroadcast和sendStickyOrderedBroadcast,与其对应的sendBroadcast和sendOrderedBroadcast相似。只是,使用sticky发送的广播会驻留在系统中,等待Receiver接收。即可以先发送广播,后注册接收器。使用removeStickyBroadcast移除。

  3、安全方面的考虑

    • 在定义对应的action时,加上包名。这样既可以起到保护broadcastReceiver的作用,也可以避免和其他人定义的action冲突
    • 在注册(registerReceiver(BroadcastReceiver,IntentFilter))的时候,可以增加权限,使没有权限的广播不会传递到自己的broadcastReceiver中
    • 如果想要禁止任何其他app发送的广播到达自己的broadcastReceiver,可以在Manifest文件中设置:android:exported="false"
    • 在调用sendBroadcast时(从 ICE_CREAM_SANDWICH版本开始),可以指定将要把广播发送到哪个包中。使用Intent.setPackage()
    • 以上注册和发送的方式都是使用Context类对应的方法,可以使用LocalBroadcastManager来注册和发送广播
      • 如果确定不会将广播发送到其他app中,可以使用LocalBroadcastManager对象对应的sendBroadcast方法
      • 如果确定不会接收其他app发送的广播,可以使用LocalBroadcastManager对象对应的registerReceiver方法

    

    LocalBroadcastManager的特点:

    • 发送的广播只会在自己的app中传播,可以确保隐私数据不会被泄露
    • 别的app发送的广播不会传递到本BroadcastReceiver中,其他的app没有办法破坏本app的数据
    • 效率更高

BroadcastReceiver介绍的更多相关文章

  1. 【转】Android BroadcastReceiver介绍

    本文主要介绍BroadcastReceiver的概念.使用.生命周期.安全性.分类.特殊的BroadcastReceiver(本地.粘性.有序.粘性有序广播).示例代码见BroadcastReceiv ...

  2. Android BroadcastReceiver介绍 (转)

    原文地址:http://www.cnblogs.com/trinea/archive/2012/11/09/2763182.html 本文主要介绍BroadcastReceiver的概念.使用.生命周 ...

  3. Android四大组件:BroadcastReceiver 介绍

    介绍 BroadcastReceiver 即广播组件,是 Android 的四大组件之一.用于监听和接收广播消息,并做出响应.有以下一些应用: 不同组件之间的通信(应用内或不同应用之间). 多线程之间 ...

  4. Android - 广播接收者 - BroadcastReceiver

    BroadcastReceiver 介绍: 广播是一种广泛运用的在应用程序之间传输信息的机制 .而 BroadcastReceiver 是对发送出来的广播 进行过滤接收并响应的一类组件 接受一种或者多 ...

  5. android 广播

    关于广播以前感觉是一知半解的,这次看到同事整理的文档,顺带跟着再参考几篇博文也学习整理了下,先上个整理的图 代码模板 发送广播 public static final String RECEIVE_A ...

  6. Android开发全套视频教程在线观看网盘下载

    千锋金牌讲师老罗老师简介: 国内第一批Android教学讲师,10多年软件开发经验,6年多教学经验,曾担任广东电信北京分公司移动事业部项目经理,主持过微软中国平台考试系统.山西省旅游局智能化平台等大型 ...

  7. android教学大纲

    android班 教学大纲 个小时 次课:Android开发环境搭建及工具介绍 Android系统简介 Android开发环境简介及搭建 AndroidStudio提供的工具组件 次课:第一个Andr ...

  8. Android学习笔记总结

    第一步: Android(1) - 在 Windows 下搭建 Android 开发环境,以及 Hello World 程序 搭建 Android 的开发环境,以及写一个简单的示例程序 · 在 Win ...

  9. android activity之间用广播传输数据

    发送者: Intent intent = new Intent("com.BroadcastAction"); intent.putExtra("result" ...

随机推荐

  1. jquery另外一种类似tab切换效果

    简要:最近做项目一些效果不能用淘宝kissy框架 所以代码得自己写啊 网上当然有很多组件 但是用他们的代码很多(有的是我不需要的代码) 且还要看API 还不如自己动手写个简单一个,是这么一种简单的效果 ...

  2. Python2.7-zipfile

    zipfile模块,提供了基本操作后缀为“zip”的文件的接口,一般使用 ZipFile 类完成操作 1.模块方法 zipfile.is_zipfile(filename):判断 filename 是 ...

  3. jsp泛型支持

    今天在使用idea做练习时,某个jsp页面报错如下: '<>'operator is not allowed for source level below 1.7 出错代码如下: Map& ...

  4. Android cannot be cast to android.app.Fragment

    10-21 17:33:45.171: E/AndroidRuntime(7644): java.lang.RuntimeException: Unable to start activity Com ...

  5. 卢卡斯定理 Lucas (p为素数)

    证明摘自:(我网上唯一看得懂的证明) https://blog.csdn.net/alan_cty/article/details/54318369 结论:(显然递归实现)lucas(n,m)=luc ...

  6. 关于docker构建镜像

    今天正好看到这一块了,记录一下,希望可以帮助到大家. 构建Dockerfile 先来看一个示例: --------------------------------------------------- ...

  7. Delphi DBGrid类控件定位到某一行,并更改为选中状态。

    Delphi中,可以使用数据集控件提供的 Locate 成员方法快速定位至某条记录, 然后通过清除数据集控件的选中状态,并重新赋值达到我们的目的. grDirectory.DataSource.Dat ...

  8. Spring3 访问静态资源

    <mvc:resources location="/jquery/" mapping="/jquery/**"/> <mvc:resource ...

  9. 20155232《网络对抗》Exp5 MSF基础应用

    20155232<网络对抗>Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode. exploit:就是利用可能存在的漏洞对目标进行攻击 ...

  10. linux & windows下重启oracle

    Linux:方法1 用root以ssh登录到linux,打开终端输入以下命令: cd $ORACLE_HOME #进入到oracle的安装目录 dbstart #重启服务器 lsnrctl start ...