广播主要分为有序广播和标准广播 (后面还会提到本地广播)
有序广播就是:有执行顺序的,这是同步的,上一个接受完之后,才会传给下一个,也可以进行拦截,不传下去
标准广播就是:异步的,跟别人没有关系,所有的广播接收器都能几乎同时受到。
接受系统广播
广播接收器可以自由地对自己感兴趣的广播进行注册,注册的方式分为两种
1.动态注册广播 (程序必须启动的时候才能接收到)
IntentFilter intentfilter=new IntentFilter();
intentfilter.addAction("xxxxxxxxxxx");这里面就是系统发送的一些广播
class xxxBrro extends BroadCastReceiver{
onReceiver()
} 写一个类继承广播 需要实现一个方法onReceiver() 处理的逻辑就是在这个方法里面写的 然后在实例化你创的这个类
通过 registerReceiver()这个方法来注册 里面有两个参数 第一个是 你创建的那个实例 第二个是 intentfilter
动态注册要注意一点 要在Activity销毁的时候取消掉 用这个方法unregisterReceiver() 取消
2.静态注册广播 (程序不启动的时候也能接收到)
这个是在清单文件AndroidMainifest.xml中注册的 这里也要写一个类去继承 BroadCastReceiver这个类
然后在清单文件中 跟注册Activity差不多 它的方式是:
<receiver android:name="xxxxxxxxxx"> 这个xxxxxxxx表示你自己创建的那个类的名字,记得要包名加类名
<intent-filter>
<action android:name=" 这个是系统广播"
</intent-filter>
</receiver>
注意: 有时候还需要一些权限,不要忘记了。。。。。
上面说到怎么接受系统广播 下面说下怎么发送广播
发送自定义广播
发送标准广播
在发送广播之前,我们要先定义一个广播接收器,这里可以选择上面的任何一种注册方式
发送广播也需要用到 Intent 这里的实现方式是:
Intent intent=new Intent("xxxxxxxxxxx");这里面就是你要发送的那个广播 然后在
sendBroadcast(intent); 通过sendBroadcast这个方法就可以了,里面有个参数就是 Intent ,这里也可以传值过去
发送有序广播
广播是一种可以跨进程的通信方式,因此我们应用程序发送的广播,其他程序也是可以接收到的
注册的方式还是上面两种 但是发送的方式就不一样了 它是这样实现的 :
sendOrderedBroadcast()通过这个方法 里面有两个参数 第一个是还是 Intent 第二个参数是 跟权限有关的字符串 一般都给null 比如在静态注册的时候申明 priority=100 这个是在这个位置申明的,不要添加错了
intent-filter priority=100>
<action android:name=" 这个是系统广播"
</intent-filter>
</receiver>
上面说到有序广播是可以进行拦截的,不传给下一个 它是这样实现的:
abortBroadcast();通过这个方法下一个广播接收器就收不到了 ,因为被上一个拦截了。
本地广播
本地广播 相对于自定义广播来说稍微复杂一些 主要是通过 LocalBroadcastManager来对广播进行管理的,并且提供了发送广播和注册广播接收器的方法
发送广播是这样实现的:
LocalBroadcastManager lbm=LocalBroadcastManager.getInstance(this)//通过这种方式来获取实例
Intent intent=new Intent()//里面放的是你要发送的广播
lbm.sendBroadcast(intent) // 发送本地广播
发送广播就是这么简单 然后是注册本地广播监听器
记住 这里是动态注册的 本地广播无法通过静态注册的方式来接受的 跟上面的是一样的,只有一个地方不一样 就是 注册的时候,它是这样实现的:
lbm.registerReceiver()//里面两个参数还是一样的 不过是通过这个类来实现的 LocalBroadcastManager
本地广播有哪几个优点呢?
1. 可以明确的知道正在发送的广播不会离开我们的程序,因此不需要担心机密数据泄露的问题
2. 其他程序无法将广播发送到我们程序的内部,因袭不需要担心会有安全漏洞的隐患
3.发送本地广播比发送全局广播会更高效。
广播说到这里就告一段落,基本的功能都讲到了。。。