作为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简单实践相关推荐

  1. Android组件化开发简单示例

    Android组件化示例代码github地址:https://github.com/respost/ModuleDemo 一.组件化初始模型 1.通过一个简单的android项目初始架构图来了解组件化 ...

  2. Android组件化方案最佳实践

    舞动着键盘和鼠标,我誓言要把这个世界写的明明白白 本文出自门心叼龙的博客,属于原创类容,转载请注明出处.https://blog.csdn.net/geduo_83/article/details/8 ...

  3. Android组件化开发实践(九):自定义Gradle插件

    本文紧接着前一章Android组件化开发实践(八):组件生命周期如何实现自动注册管理,主要讲解怎么通过自定义插件来实现组件生命周期的自动注册管理. 1. 采用groovy创建插件 新建一个Java L ...

  4. android 广播解绑,Android四大组件之BroadCast

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? Android四大组件之BroadCast 一.广播概述 Android应用可以从Android系统和其他Android ...

  5. OpenGL.ES在Android上的简单实践:21-水印录制(MediaCodec输出h264+MediaMuxer合成mp4 上)

    OpenGL.ES在Android上的简单实践:21-水印录制(MediaCodec输出h264+MediaMuxer合成mp4 上) 1.录制视频需要什么? 在上篇文章,我们已经成功的满足了需求,在 ...

  6. XCoreRedux框架:Android UI组件化与Redux实践

    XCoreRedux框架:Android UI组件化与Redux实践 @author: 莫川 https://github.com/nuptboyzhb/ XCoreRedux源码+Demo:http ...

  7. OpenGL.ES在Android上的简单实践:11-全景(索引-深度测试)

    OpenGL.ES在Android上的简单实践:11-全景(正方体-索引-深度测试) 0.全景图要怎么看? What is 全景?可能很多人单看这名字不太清楚.但看到下面的图的时候就噢的一声~瞬间廓然 ...

  8. OpenGL.ES在Android上的简单实践:10-曲棍球(拖动物体、碰撞测试)

    OpenGL.ES在Android上的简单实践:10-曲棍球(拖动物体.碰撞测试) 1.让木槌跟随手指移动 继续上一篇文章9的内容.既然可以测试木槌是否被触碰了,我们将继续努力下去:当我们来回拖动木槌 ...

  9. OpenGL.ES在Android上的简单实践:23-水印录制(FBO离屏渲染,解决透明冲突,画中画)

    OpenGL.ES在Android上的简单实践:23-水印录制(FBO离屏录制,解决透明冲突) 1.水印签名罢工了? 不知道大家有没注意到,之前我们使用MediaCodec录制的视频,水印签名那部分区 ...

最新文章

  1. mysql删除原则_MySQL数据库的增删选查
  2. 3.8 采购协议管理
  3. Chipseq数据库的建立
  4. TortoiseGit清除账号密码
  5. 012 pandas与matplotlib结合制图
  6. std::string的resize()与reserve()的区别
  7. linux内存管理(十五)-内存池
  8. Rabbitmq学习笔记008---AmqpException: No method found for class java.lang.String
  9. 如何借助大数据进行宏观经济分析
  10. DWF文件该如何打开查看呢?
  11. 冰点还原精灵如何关闭?
  12. Linux内核源码阅读以及工具(转)
  13. AE502 112种创意视频字幕动画呼出线框文字标题效果包括PR预设与扩展脚本ae模板
  14. 2020年2月全国程序员工资统计,平均工资13716元
  15. Delphi2010 的Google在线翻译
  16. 【GNSS】北斗坐标系
  17. 操作系统——入门介绍
  18. excel 公式 单引号 concat_电气计算速度慢?62套自动计算EXCEL表格,输入数据秒出结果...
  19. Flutter开发(十二):Flutter调用硬件,插件,第三方服务和平台通知
  20. 2008年教育硕士联考心理学部分真题及答案及评析

热门文章

  1. JavaWeb(七)——Cookie、Session
  2. mysql 导出用户权限_MySQL中导出用户权限设置的脚本分享
  3. proe4.0安装教程
  4. Hspice2008安装步骤
  5. idea如何导出war文件
  6. 神经网络 | 网络优化-线性神经网络-delta学习规则-梯度下降法(线性神经网络-异或问题Python源代码)
  7. es6 取数组的第一个和最后一个_ES6:解构——JavaScript 从数组和对象中提取数据的优雅方法...
  8. 日常必备的16条Linux命令
  9. 【NLP】情感分析:BERT vs Catboost
  10. 【机器学习】太强了!这个建模神器可以玩一辈子