BroadcastReceiver之动态广播 demo+笔记
在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+笔记相关推荐
- Android BroadcastReceiver之 静态广播 笔记+demo
静态注册广播也称常驻广播,动态注册广播在取消注册后便不再监听广播事件,而静态广播即使没有启动应用也可以监听广播事件.创建步骤主要分为创建一个广播接收器的子类,以及在配置清单文件中静态注册广播 案例 A ...
- android 注册动态广播 注销_动态注册和注销BroadcastReceiver
Android广播机制 一.Android广播机制介绍 广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接收方是如何处理数据的. Android中广播的是操作系统中产生的各种各样的事件 ...
- android动态静态广播,Android BroadcastReceiver实现自定义静态广播和动态广播(黏性广播)...
思维导图: 静态广播: 当广播发出去的时候 如果接收广播的应用程序已经退出,也能接收广播: 发送者代码: package com.example.g160628_android_21_sender; ...
- Android 动态广播与静态广播
学而时习,稳固而之心 目前推荐使用动态广播,现在已经很就没有使用过静态广播了. 动态广播与静态广播的联系 1 动态广播的速度要快于静态广播 2 静态广播的生存期可以比动态广播的长很多 在Manifes ...
- Android在Service中注册动态广播接收者
Android广播分为动态.静态广播. 广播接收器注册一共有两种形式 : 静态注册和动态注册. 两者及其接收广播的区别: 1.动态注册的广播 永远要快于 静态注册的广播,不管静态注册的优先级设置的多高 ...
- Android动态广播添加权限
第一步:自己定义权限,并且使用自定义权限 <uses-permission android:name="com.cn.customview.permissions.MY_BROADCA ...
- android 发送广播 接收广播 动态广播接收
1. 静态广播 见网址: http://www.devdiv.com/forum.php?mod=viewthread&tid=48614 2.同时多个动态广播 private Broadca ...
- Android S动态广播注册流程(广播1)
Android S动态广播注册流程 1. 动态广播注册的流程 2. 新建一个动态广播接收者 3. App部分的registerReceiver 4. system_server侧的广播注册 5. 总结 ...
- java jdk动态代理 cglib动态代理demo
最近在研究java动态代理这块,以前也看了很多次java动态代理,感觉一直不是怎么明白,这两天看了看又明白了些,现给出我参考网上写的一个demo jdk动态代理实现: View Code import ...
最新文章
- UML用例图概要(转)
- java web三大组件之filter过滤器
- MySQL触发器使用详解
- python多线程资源共享_Python:关于多处理/多线程和共享资源的问题
- 整数的个数(信息学奥赛一本通-T1067)
- Java - 安装jdk并设置环境变量
- MyBatis的CURD
- canvas绘制精细走动时钟
- PYPL 7 月榜单公布:Java 份额出现下降趋势
- 动态创建TXMLDocument--使用IXMLDocument接口
- python不定长的参数*,**使用(三分钟读懂)
- python 编码解码原理_Python JSON编解码方式原理详解
- java common-lang_common-lang3工具类-使用手册
- Node.js 0.8.20 稳定版发布
- 用vs2008编写和调试linux程序 ----VisualGDB 使用教程
- 价量分析.成交量判断多空头.用跌减涨增量法买股票.成交量识庄家
- ps html插件初始化失败,解决PSCC2019无法安装扩展插件怎么办?
- 用python与openpyxl操作excel(wps excel与office excel均可使用)
- 2020最新版前端学习路线图--微信小程序制作原来如此简单
- AR/VR技术在旅游业+零售业的应用
热门文章
- [转]Redis内部数据结构详解-sds
- 浅谈_依赖注入 asp.net core
- Java通过JDBC操作Hive
- Centos6.8下SVN安装
- [转]微软代码示例:ASP.NET 2.0 三层架构应用程序教程系列
- 2008 读第一本书
- ie模式下html中的按钮失效,解决ewebeditor编辑器在IE8下按钮失效、点击后没反应的问题...
- java 开发平台idea_JAVA开发平台intellij idea使用教程:有哪些方法可以实现自动导入...
- 如何快速打好java基础_学习Java课程时如何才能打好基础呢?
- 如何填充自画形状_AI中如何用形状填充