Android BroadcastReceiver 简介 

在 Android 中使用 Activity, Service, Broadcast, BroadcastReceiver 

   活动(Activity) - 用于表现功能  

   服务(Service) - 相当于后台运行的 Activity 

   广播(Broadcast) - 用于发送广播  

   广播接收器(BroadcastReceiver) - 用于接收广播 

   Intent - 用于连接以上各个组件,并在其间传递消息 



BroadcastReceiver 

    在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件。下面将详细的阐述如何发送Broadcast和使用BroadcastReceiver过 



滤接收的过程: 

    首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个Intent对象,然后通过调用 Context.sendBroadcast()、sendOrderBroadcast()或sendStickyBroadcast()方法,把 Intent对象以广播方式发送出去。 

    当Intent发送以后,所有已经注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,若 匹配则就会调用BroadcastReceiver的onReceive()方法。所以当我们定义一个BroadcastReceiver的时候,都需要 实现onReceive()方法。 







注册BroadcastReceiver有两种方式: 

    一种方式是,静态的在AndroidManifest.xml中用<receiver>标签生命注册,并在标签内用<intent- filter>标签设置过滤器。 



    另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter对象,然后在需要注册的地方调 Context.registerReceiver()方法,如果取消时就调用Context.unregisterReceiver()方法。如果用动 态方式注册的BroadcastReceiver的Context对象被销毁时,BroadcastReceiver也就自动取消注册了。 



    另外,若在使用sendBroadcast()的方法是指定了接收权限,则只有在AndroidManifest.xml中用<uses- permission>标签声明了拥有此权限的BroascastReceiver才会有可能接收到发送来的Broadcast。 



    同样,若在注册BroadcastReceiver时指定了可接收的Broadcast的权限,则只有在包内的AndroidManifest.xml中 用<uses-permission>标签声明了,拥有此权限的Context对象所发送的Broadcast才能被这个 BroadcastReceiver所接收。 



动态注册: 

    IntentFilter intentFilter = new IntentFilter(); 

    intentFilter.addAction(String);--为 BroadcastReceiver指定action,使之用于接收同action的广播 registerReceiver(BroadcastReceiver,intentFilter); 

    一般:在onStart中注册,onStop中取消unregisterReceiver 



发送广播消息:extends Service 

    指定广播目标Action:Intent Intent = new Intent(action-String) 

    --指定了此action的receiver会接收此广播 

    需传递参数(可选) putExtra(); 

    发送:sendBroadcast(Intent); 

最新文章

  1. XML编码utf-8有中文无法解析或乱码 C#
  2. Android解析服务器Json数据实例
  3. USACO 5.4 Twofive(DP)
  4. org/objectweb/asm/Type异常解决办法
  5. Java 门面模式 浅析
  6. 优化DB2缓冲页的大小
  7. python PIL下的各种问题
  8. LINUX 下mysql数据库导出
  9. php/java bridge
  10. RESTEasy:@FormParam、@PathParam、@QueryParam、@HeaderParam、@CookieParam、@MatrixParam说明
  11. 从字节码层面看“HelloWorld” (转)
  12. 深入浅出JMS(一)——JMS简要
  13. 简单实现Python调用有道API接口(最新的)
  14. 转发:tomcat的acess_log打印post请求参数,分析日志
  15. 学习Karma+Jasmine+istanbul+webpack自动化单元测试
  16. css 清除一些默认的设置
  17. Linux VFS的主要的数据结构
  18. Merkle tree在区块链中的应用
  19. ROS知识(10)----smach_viewer的Graph view不能显示状态图
  20. fabric本地一键部署LAMP

热门文章

  1. 2.android工具使用及appium启动
  2. UVA10253 Series-Parallel Networks
  3. 前端插件--swiper.js
  4. jeecms 强大的采集功能优化 转载 https://blog.csdn.net/jeff06143132/article/details/7099003
  5. 使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用
  6. java.lang.ClassCastException: java.io.ByteArrayInputStream cannot be cast to java.io.FileInputStream
  7. 验证码倒计时js
  8. Sublime Text Version 3.2.1(Build 3207)注册
  9. PHP配置环境中开启GD库
  10. 机器学习中的那些树——决策树(三、CART 树)