广播的概念:
1.实现了不同的程序之间的数据传输与共享,因为只要是和发送广播的action相同的接受者都能接受这个广播。典型的应用就是android自带的短信,电话等等广播,只要我们实现了他们的action的广播,那么我们就能接收他们的数据了,以便做出一些处理。比如说拦截系统短信,拦截骚扰电话等等。
2.起到了一个通知的作用,比如在service中要通知主程序,更新主程序的UI等。因为service是没有界面的,所以不能直接获得主程序中的控件,这样我们就只能在主程序中实现一个广播接受者专门用来接受service发过来的数据和通知了。
广播分为标准广播和有序广播
标准广播:多个广播接收器同时接收
有序广播:一个一个有序接收
而广播接收器需要注册,注册方法有两种,动态和静态;
动态:在代码中注册,比较灵活;使用后可以销毁,不占用多余内存;特别是对于一些在8.0版本以上的隐式广播,动态注册可以显示,但是缺点就是只有当前程序启动并不被关闭才能使用。
静态:在AndroidManifest.xml中注册,既然是静态的,那开机后在任何地方都可以显示,程序未启动也可以使用;那缺点很明显了,虚拟机开启,无时无刻都在使用,比较消耗内存,8.0隐式广播不能显示,只有修改版本或者修改注册方式才可以显示。
以上的概念到底有啥用?
下面用小例子给你解说
例子一:用动态注册广播查询模拟器(手机)电量;
既然是动态注册,那就得在程序中运行,那就得和活动扯上关系,只有跟活动有关系,才可能运行。
去主活动的布局文件,默认的布局文件是一个布局加一个TextView,我们只需要改增加TextView的一个id就好(把从系统广播中得到的电量放到TextView中显示)
然后在主活动中连接这个控件和id
代码不附上了,看到我博客的你,如果想复习或者学习,希望能打一遍,加深记忆。
这要怎样看出来呢,模拟器右下角的
这就是模拟器的系统电量,右上角的Charger Connection是设置手机USB是否连接的(就是模仿充不充电的,实例一升级版会用到)
当我们拖动系统电量时,程序中监听到的电量值就变化。
这边有个让一部分代码生成方法的方法:选择要生成方法的代码,右击到Refactor,点击Extract
接着输入方法名,就可以自动产生无参的方法了(为了让架构更加分明)
实例一的升级版,在接收广播电量的同时,接收系统的USB连接情况;
设置频道时 增加连接和未连接广播频道
把存储广播接收到的电量设置为全局变量
添加检测频道的if语句
如果usb连接,则提示连接,充电
不然,检测电量是否低于60
然后就是静态的注册
活动是需要注册的,那作为四大组件之一的广播也是可以注册的
使用静态的第一步,创建一个Class继承BroadcastReceiver
这个是为了检测应用的安装和卸载
第二步在AndroidManifest.xml中注册信息
一般在Activity周围写标签就好
还有一些广播可能需要
比如电量广播接收就需要,还有检测网络状态也需要其他的声明使用许可,有需要百度即可。
我这边就
都提示了,至于为啥要提示这个包,为了知道这个是那个程序卸载了。
几个小时的复习和敲打,完成了,最近都在复习以前的知识,写着项目,今天才开始学新的知识。
后面的标准和有序广播,后面再做详细介绍。