Android组件之BroadCast简单实践
作为Android的四大组件之一,没有理由不介绍一下BroadCast,BroadCast中文简单翻译就是广播,前阵子浙江某大学的啦啦操,广场舞的大妈,其中大妈和学生从喇叭和音响上听到的声音就是事件源,接收者就是这些大妈和学生,程序源自实践,Android中BroadCast,有事件广播者也有事件接收者,Broadcast是一种广泛运用的在应用程序之间传输信息的机制,BroadcastReceiver是对发送出来的 Broadcast进行过滤接受并响应的一类组件,也就是接收者。讲完了基本的概念,可以开始基本的实践:
自定义广播的两种实现方式
两种实现方式,一种是静态,一种是动态,先看下静态的实现过程:
定义一个BookBroadCast接收者(有几个判断添加是系统广播需要的):
public class BookBroadCast extends BroadcastReceiver {private String tag = "BookBroadCast";@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString 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终止:
@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();unregisterReceiver(bookReceiver);}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.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组件化示例代码github地址:https://github.com/respost/ModuleDemo 一.组件化初始模型 1.通过一个简单的android项目初始架构图来了解组件化 ...
- Android组件化方案最佳实践
舞动着键盘和鼠标,我誓言要把这个世界写的明明白白 本文出自门心叼龙的博客,属于原创类容,转载请注明出处.https://blog.csdn.net/geduo_83/article/details/8 ...
- Android组件化开发实践(九):自定义Gradle插件
本文紧接着前一章Android组件化开发实践(八):组件生命周期如何实现自动注册管理,主要讲解怎么通过自定义插件来实现组件生命周期的自动注册管理. 1. 采用groovy创建插件 新建一个Java L ...
- android 广播解绑,Android四大组件之BroadCast
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android四大组件之BroadCast 一.广播概述 Android应用可以从Android系统和其他Android ...
- OpenGL.ES在Android上的简单实践:21-水印录制(MediaCodec输出h264+MediaMuxer合成mp4 上)
OpenGL.ES在Android上的简单实践:21-水印录制(MediaCodec输出h264+MediaMuxer合成mp4 上) 1.录制视频需要什么? 在上篇文章,我们已经成功的满足了需求,在 ...
- XCoreRedux框架:Android UI组件化与Redux实践
XCoreRedux框架:Android UI组件化与Redux实践 @author: 莫川 https://github.com/nuptboyzhb/ XCoreRedux源码+Demo:http ...
- OpenGL.ES在Android上的简单实践:11-全景(索引-深度测试)
OpenGL.ES在Android上的简单实践:11-全景(正方体-索引-深度测试) 0.全景图要怎么看? What is 全景?可能很多人单看这名字不太清楚.但看到下面的图的时候就噢的一声~瞬间廓然 ...
- OpenGL.ES在Android上的简单实践:10-曲棍球(拖动物体、碰撞测试)
OpenGL.ES在Android上的简单实践:10-曲棍球(拖动物体.碰撞测试) 1.让木槌跟随手指移动 继续上一篇文章9的内容.既然可以测试木槌是否被触碰了,我们将继续努力下去:当我们来回拖动木槌 ...
- OpenGL.ES在Android上的简单实践:23-水印录制(FBO离屏渲染,解决透明冲突,画中画)
OpenGL.ES在Android上的简单实践:23-水印录制(FBO离屏录制,解决透明冲突) 1.水印签名罢工了? 不知道大家有没注意到,之前我们使用MediaCodec录制的视频,水印签名那部分区 ...
最新文章
- mysql删除原则_MySQL数据库的增删选查
- 3.8	采购协议管理
- Chipseq数据库的建立
- TortoiseGit清除账号密码
- 012 pandas与matplotlib结合制图
- std::string的resize()与reserve()的区别
- linux内存管理(十五)-内存池
- Rabbitmq学习笔记008---AmqpException: No method found for class java.lang.String
- 如何借助大数据进行宏观经济分析
- DWF文件该如何打开查看呢?
- 冰点还原精灵如何关闭?
- Linux内核源码阅读以及工具(转)
- AE502 112种创意视频字幕动画呼出线框文字标题效果包括PR预设与扩展脚本ae模板
- 2020年2月全国程序员工资统计,平均工资13716元
- Delphi2010 的Google在线翻译
- 【GNSS】北斗坐标系
- 操作系统——入门介绍
- excel 公式 单引号 concat_电气计算速度慢?62套自动计算EXCEL表格,输入数据秒出结果...
- Flutter开发(十二):Flutter调用硬件,插件,第三方服务和平台通知
- 2008年教育硕士联考心理学部分真题及答案及评析
热门文章
- JavaWeb(七)——Cookie、Session
- mysql 导出用户权限_MySQL中导出用户权限设置的脚本分享
- proe4.0安装教程
- Hspice2008安装步骤
- idea如何导出war文件
- 神经网络 | 网络优化-线性神经网络-delta学习规则-梯度下降法(线性神经网络-异或问题Python源代码)
- es6 取数组的第一个和最后一个_ES6:解构——JavaScript 从数组和对象中提取数据的优雅方法...
- 日常必备的16条Linux命令
- 【NLP】情感分析:BERT vs Catboost
- 【机器学习】太强了!这个建模神器可以玩一辈子