Android组件之BroadCast简单实践
作为Android的四大组件之一,没有理由不介绍一下BroadCast,BroadCast中文简单翻译就是广播,前阵子浙江某大学的啦啦操,广场舞的大妈,其中大妈和学生从喇叭和音响上听到的声音就是事件源,接收者就是这些大妈和学生,程序源自实践,Android中BroadCast,有事件广播者也有事件接收者,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件,也就是接收者。讲完了基本的概念,可以开始基本的实践:
自定义广播的两种实现方式
两种实现方式,一种是静态,一种是动态,先看下静态的实现过程:
定义一个BookBroadCast接收者(有几个判断添加是系统广播需要的):
public class BookBroadCast extends BroadcastReceiver {
private String tag = "BookBroadCast";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String actionString = intent.getAction();
String name = intent.getStringExtra("Name");
if (actionString.equals(Intent.ACTION_TIME_CHANGED)) {
Log.i(tag, "Name:" + name + "--Action:" + actionString
+ "--哥们,时间改变了~");
} else if (actionString.equals(Intent.ACTION_BATTERY_CHANGED)) {
Log.i(tag, "Name:" + name + "--Action:" + actionString
+ "--哥们,电量变了~");
} else {
Log.i(tag, "Name:" + name + "--Action:" + actionString);
}
}
}
看下App页面:

静态广播对应第一个按钮,点击事件:
Intent intent = new Intent("com.google.broadcast.BookBroadCast.static");
intent.putExtra("Name", "静态广播");
sendBroadcast(intent);
静态广播需要在AndroidManifest.xml中注册一下:
<receiver android:name="com.google.broadcast.BookBroadCast">
<intent-filter >
<action android:name="com.google.broadcast.BookBroadCast.static"/>
<action android:name="android.intent.action.TIME_SET"/>
</intent-filter>
</receiver>
结果如下:

动态调用就是不需要在AndroidManifest.xml注册,在程序中动态生成filter设置action,在activity中的onStart注册,onStop终止:
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
unregisterReceiver(bookReceiver);
} @Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.google.broadcast.BookBroadCast.dymanic");
bookReceiver = new BookBroadCast();
registerReceiver(bookReceiver, intentFilter); }
动态调用事件,对应第二个按钮:
Intent dintent = new Intent("com.google.broadcast.BookBroadCast.dymanic");
dintent.putExtra("Name", "动态广播");
sendBroadcast(dintent);
结果如下:

两种系统广播调用方式
关于系统广播的各种事件网上一找一堆,我就没必要贴在这里了,先来实现第三个和第四个按钮的事件,第三个是系统事件的改变,第四个是电池电量的改变:
第三个action的常量的和Intent枚举出来的名称有出入:
<action android:name="android.intent.action.TIME_SET"/>
调用的时候是这样的:
Intent sintent = new Intent(Intent.ACTION_TIME_CHANGED);
sintent.putExtra("Name", "不被保护系统广播");
sendBroadcast(sintent);
结果如下:

这个其实都没有什么大的问题,然后按照静态注册方式没法搞定第四个电池电量的问题,先来看第四个是如何实现的:
IntentFilter systemintentFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
systembookReceiver = new BookBroadCast();
registerReceiver(systembookReceiver, systemintentFilter);
首先可以看出不是静态注册的,需要动态注册,然后不需要调用sendBroadcast,结果如下:

这个问题解决都弄了一个多小时,最终的Google的API找到对应的解释:
地址:http://developer.android.com/reference/android/content/Intent.html#ACTION_TIME_TICK

遇到问题发现Google才是最可靠的,也搜了不少中文文章,就不信没人遇到坑,哎,周六看博客的都是爱学习的孩子,周末愉快~
Android组件之BroadCast简单实践的更多相关文章
- Android组件化探索与实践
什么是组件化 不用去纠结组件和模块语义上的区别,如果模块间不存在强依赖且模块间可以任意组合,我们就说这些模块是组件化的. 组件化的好处 实现组件化本身就是一个解耦的过程,同时也在不断对你的项目代码进行 ...
- Android 设计随便说说之简单实践(合理组合)
上一篇(Android 设计随便说说之简单实践(模块划分))例举了应用商店设计来说明怎么做模块划分.模块划分主要依赖于第一是业务需求,具体是怎么样的业务.应用商店则包括两个业务,就是向用户展示appl ...
- Android组件化框架设计与实践
在目前移动互联网时代,每个 APP 就是流量入口,与过去 PC Web 浏览器时代不同的是,APP 的体验与迭代速度影响着用户的粘性,这同时也对从事移动开发人员提出更高要求,进而移动端框架也层出不穷. ...
- android四大组件之Broadcast
广播的概念 现实中:我们常常使用电台通过发送广播发布消息,买个收音机,就能收听 Android:系统在产生某个事件时发送广播,应用程序使用广播接收者接收这个广播,就知道系统产生了什么事件.Androi ...
- 使用Broadcast实现android组件之间的通信 分类: android 学习笔记 2015-07-09 14:16 110人阅读 评论(0) 收藏
android组件之间的通信有多种实现方式,Broadcast就是其中一种.在activity和fragment之间的通信,broadcast用的更多本文以一个activity为例. 效果如图: 布局 ...
- 使用Broadcast实现android组件之间的通信
android组件之间的通信有多种实现方式,Broadcast就是其中一种.在activity和fragment之间的通信,broadcast用的更多本文以一个activity为例. 效果如图: 布局 ...
- 【Android开发日记】之入门篇(六)——Android四大组件之Broadcast Receiver
广播接受者是作为系统的监听者存在着的,它可以监听系统或系统中其他应用发生的事件来做出响应.如设备开机时,应用要检查数据的变化状况,此时就可以通过广播来把消息通知给用户.又如网络状态改变时,电量变化时都 ...
- Android组件化最佳实践 ARetrofit原理
ARetrofit原理讲原理之前,我想先说说为什么要ARetrofit.开发ARetrofit这个项目的思路来源其实是Retrofit,Retrofit是Square公司开发的一款针对Android网 ...
- Android 组件化最佳实践 ARetrofit 原理
本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/TXFt7ymgQXLJyBOJL8F6xg作者:朱壹飞 ARetrofit 是一款针对Android ...
随机推荐
- Laravel框架初学一路由(基本路由)
基本路由 Laravel最基本的路由:接收一个URI和Closure闭包函数 ,提供了定义路由的一种非常简单且富有表达力的方式 Route::get("foo", function ...
- Xshell拖拽上传文件插件
lrzsz是一款在linux里可代替ftp上传和下载的程序.在linux中支持直接拖拽上传的插件:同时也支持rz和sz进行命令上传和下载. 插件安装 yum -y install lrzsz 上传(r ...
- android activity 窗口 样式
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 将 活动 设置成 窗口样式, 可以设置 主题 为 对话框, 或者 半透明. 安卓:主题= ...
- 本地文件包含漏洞(LFI漏洞)
0x00 前言 本文的主要目的是分享在服务器遭受文件包含漏洞时,使用各种技术对Web服务器进行攻击的想法. 我们都知道LFI漏洞允许用户通过在URL中包括一个文件.在本文中,我使用了bWAPP和DVW ...
- PAT(Basic Level)--个位数统计
输入一个不超过1000位的整数,计算每个数字出现的次数. 一道十分简单的题目,最开始以为Java的String没有计算长度的方法,还想了半天,而且还用HashMap做了一次,代码特别长,看了别人的代码 ...
- 【10.26校内测试】【状压?DP】【最小生成树?搜索?】
Solution 据说正解DP30行??? 然后写了100行的状压DP?? 疯狂特判,一算极限时间复杂度过不了aaa!! 然而还是过了....QAQ 所以我定的状态是待转移的位置的前三位,用6位二进制 ...
- 【洛谷】4304:[TJOI2013]攻击装置【最大点独立集】【二分图】2172: [国家集训队]部落战争【二分图/网络流】【最小路径覆盖】
P4304 [TJOI2013]攻击装置 题目描述 给定一个01矩阵,其中你可以在0的位置放置攻击装置. 每一个攻击装置(x,y)都可以按照“日”字攻击其周围的8个位置(x-1,y-2),(x-2,y ...
- 【洛谷】2607: [ZJOI2008]骑士【树形DP】【基环树】
P2607 [ZJOI2008]骑士 题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一 ...
- python开发_json_一种轻量级的数据交换格式
以下是我做的对于python中json模块的demo 运行效果: Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.16 ...
- Codeforces Round #256 (Div. 2) C. Painting Fence
C. Painting Fence Bizon the Champion isn't just attentive, he also is very hardworking. Bizon the Ch ...