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

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

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

实例

A.编写广播接受者的发送方

1.布局文件 点击发送广播

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_alignParentTop="true"android:onClick="send"android:text="send" /></RelativeLayout>

2编写广播接受者

package com.example.broadcasetsend;import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;public class MainActivity extends Activity {private static final String broadcast = "com.chj";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}//自定义广播public void send(View view) {Intent intent = new Intent();intent.setAction(broadcast);// broadcast可以是系统广播,也可以是自己定义的// 一个actionintent.putExtra("name", "suzhou");sendBroadcast(intent);}
}

这样广播接受者的发送方编写完成

B.广播接受者的接收方

1.只需要编写接受者即可

package com.example.broadcastrecieve;import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.util.Log;
import android.view.Menu;//动态注册广播 其生命周期和调用者一致 一旦Activity退出 动态广播接受者也就退出
public class MainActivity extends Activity {private static final String broadcast = "com.chj";MyBroadCastReceiver myBroadCastReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化广播接受者myBroadCastReceiver =new MyBroadCastReceiver();//过滤IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(broadcast);//注册广播 只有注册完广播 广播接受者才能监听到消息registerReceiver(myBroadCastReceiver, intentFilter);}@Overrideprotected void onDestroy() {// TODO Auto-generated method stub//在onCreate注册广播,一般在onDestroy取消注册 确保在后台也可以监听广播//若不想在后台监听广播可以在onStart注册 在onStop取消unregisterReceiver(myBroadCastReceiver);super.onDestroy();}// 监听广播 onReceive不能执行耗时操作(不超过10s 否则发生ANR)private class MyBroadCastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//获取广播的action,若匹配,取得意图中的数据// TODO Auto-generated method stubString actionString = intent.getAction();if (actionString.equals(broadcast)) {//取得意图中的数据String nameString = intent.getExtras().getString("name");Log.e("chj", nameString);}}}}

此处采用动态方式注册广播接受者,不需要在清单文件配置广播接受者 接收方也编写完毕

注册BroadcastReceiver有两种方式:
一种方式是,静态的在AndroidManifest.xml中用<receiver>标签声明注册,并在标签内用<intent- filter>标签设置过滤器。
另一种方式是,动态的在代码中先定义并设置好一个 IntentFilter 对象,然后在需要注册的地方调Context.registerReceiver()方法,如果取消注册就调用 Context.unregisterReceiver()方法。用动态方式注册的BroadcastReceiver的Context对象被销毁时,BroadcastReceiver也就自动取消注册了。(特别注意,有些可能需要后台监听的,如短信消息)

程序运行步骤:

先安装发送方 再安装接收方

安装完毕后,运行接收方按home键让程序在后台监听广播

在运行发送方,点击send,广播logcat会有输出

在onCreate注册广播,一般在onDestroy取消注册 确保在后台也可以监听广播
若不想在后台监听广播可以在onStart注册 在onStop取消

若果将onDestroy代码移到onStop,不在在onCreate注册而在onStart注册广播,再按上面步骤执行,会发现后台不在监听广播

BroadcastReceiver之动态广播 demo+笔记相关推荐

  1. Android BroadcastReceiver之 静态广播 笔记+demo

    静态注册广播也称常驻广播,动态注册广播在取消注册后便不再监听广播事件,而静态广播即使没有启动应用也可以监听广播事件.创建步骤主要分为创建一个广播接收器的子类,以及在配置清单文件中静态注册广播 案例 A ...

  2. android 注册动态广播 注销_动态注册和注销BroadcastReceiver

    Android广播机制 一.Android广播机制介绍 广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的. Android中广播的是操作系统中产生的各种各样的事件 ...

  3. android动态静态广播,Android BroadcastReceiver实现自定义静态广播和动态广播(黏性广播)...

    思维导图: 静态广播: 当广播发出去的时候 如果接收广播的应用程序已经退出,也能接收广播: 发送者代码: package com.example.g160628_android_21_sender; ...

  4. Android 动态广播与静态广播

    学而时习,稳固而之心 目前推荐使用动态广播,现在已经很就没有使用过静态广播了. 动态广播与静态广播的联系 1 动态广播的速度要快于静态广播 2 静态广播的生存期可以比动态广播的长很多 在Manifes ...

  5. Android在Service中注册动态广播接收者

    Android广播分为动态.静态广播. 广播接收器注册一共有两种形式 : 静态注册和动态注册. 两者及其接收广播的区别: 1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高 ...

  6. Android动态广播添加权限

    第一步:自己定义权限,并且使用自定义权限 <uses-permission android:name="com.cn.customview.permissions.MY_BROADCA ...

  7. android 发送广播 接收广播 动态广播接收

    1. 静态广播 见网址: http://www.devdiv.com/forum.php?mod=viewthread&tid=48614 2.同时多个动态广播 private Broadca ...

  8. Android S动态广播注册流程(广播1)

    Android S动态广播注册流程 1. 动态广播注册的流程 2. 新建一个动态广播接收者 3. App部分的registerReceiver 4. system_server侧的广播注册 5. 总结 ...

  9. java jdk动态代理 cglib动态代理demo

    最近在研究java动态代理这块,以前也看了很多次java动态代理,感觉一直不是怎么明白,这两天看了看又明白了些,现给出我参考网上写的一个demo jdk动态代理实现: View Code import ...

最新文章

  1. UML用例图概要(转)
  2. java web三大组件之filter过滤器
  3. MySQL触发器使用详解
  4. python多线程资源共享_Python:关于多处理/多线程和共享资源的问题
  5. 整数的个数(信息学奥赛一本通-T1067)
  6. Java - 安装jdk并设置环境变量
  7. MyBatis的CURD
  8. canvas绘制精细走动时钟
  9. PYPL 7 月榜单公布:Java 份额出现下降趋势
  10. 动态创建TXMLDocument--使用IXMLDocument接口
  11. python不定长的参数*,**使用(三分钟读懂)
  12. python 编码解码原理_Python JSON编解码方式原理详解
  13. java common-lang_common-lang3工具类-使用手册
  14. Node.js 0.8.20 稳定版发布
  15. 用vs2008编写和调试linux程序 ----VisualGDB 使用教程
  16. 价量分析.成交量判断多空头.用跌减涨增量法买股票.成交量识庄家
  17. ps html插件初始化失败,解决PSCC2019无法安装扩展插件怎么办?
  18. 用python与openpyxl操作excel(wps excel与office excel均可使用)
  19. 2020最新版前端学习路线图--微信小程序制作原来如此简单
  20. AR/VR技术在旅游业+零售业的应用

热门文章

  1. [转]Redis内部数据结构详解-sds
  2. 浅谈_依赖注入 asp.net core
  3. Java通过JDBC操作Hive
  4. Centos6.8下SVN安装
  5. [转]微软代码示例:ASP.NET 2.0 三层架构应用程序教程系列
  6. 2008 读第一本书
  7. ie模式下html中的按钮失效,解决ewebeditor编辑器在IE8下按钮失效、点击后没反应的问题...
  8. java 开发平台idea_JAVA开发平台intellij idea使用教程:有哪些方法可以实现自动导入...
  9. 如何快速打好java基础_学习Java课程时如何才能打好基础呢?
  10. 如何填充自画形状_AI中如何用形状填充