有关于广播的操作
1.广播来自哪里
系统广播
Android内置了很多系统级别的广播,我们可以在应用程序中通过监听这些广播来得到各种系统的状态信息。比如手机开机完成后会发出一条广播,电池的电量发生变化会发出一条广播,时间或时区发生改变也会发出一条广播,等等。
自定义广播
通过Intent类定义广播,通过sendBroadcast方法将之发送出去
sendBroadcast(Intent("aaa")) //发送自定义广播
2.接收广播
注册广播的方式一般有两种,在代码中注册和在AndroidManifest.xml中注册,其中前者也被称为动态注册,后者也被称为静态注册。
动态注册
1.继承BroadcastReceiver类,实现onReceive方法,onReceive方法中的接受广播后所执行的操作
2.创建intentFilter和a类的实例(a类为BroadcastReceiver的子类)
3.添加广播,使用用intentFilter中和addAction方法进行添加
4.进行注册,调用registerReceiver方法,第一个参数是实例化的a类,第二个方法是实例化的intentFilter
var intentFilter: IntentFilter = IntentFilter()
var a: NetworkChangeReceiver = NetworkChangeReceiver()
intentFilter.addAction("aaa")//想接收什么广播,就在此添加
registerReceiver(a, intentFilter)//进行注册
//取消注册
override fun onDestroy() {
? ?super.onDestroy()
? ?unregisterReceiver(networkChangeReceiver)
}
class a : BroadcastReceiver() {
? ?override fun onReceive(context: Context?, intent: Intent?) {
? ?//具体操作
}
}
静态注册
1.创建广播接收器→New→Other→BroadcastReceiver
class MyBroadcastReceiver : BroadcastReceiver() {
? ?override fun onReceive(context: Context, intent: Intent) {
? ? ? ?Toast.makeText(context, "静态注册", Toast.LENGTH_SHORT).show()
? }
}
些类也继承了BroadcastReceiver类,所以在此类中的操作与动态注册中是相同的
2.在AndroidManifest.xml中进行注册,打开AndroidManifest.xml,我们可以看到多了以下下几行代码,这是程序已经自动帮我们进行注册了,receiver(接收者)
<receiver android:name=".MyBroadcastReceiver">
</receiver>
3.添加想要接收的广播,在xml中添加意图过滤器,就可以在其中加入自己想要接受的广播
<receiver android:name=".MyBroadcastReceiver">
? ?<intent-filter>
? ? ? ? ? ?<action android:name="aaa"/>
? ?</intent-filter>
</receiver>
总结
动态注册的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势,但是它也存在着一个缺点,即必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在onCreate()方法中的。静态注册能在程序未启动的情况下就能接受广播执行操作,但远不如动态注册灵活。
生活中的实例,需要联网的软件在未连接网络时给出的的提示,软件的开机自启,应用在wifi状态下自动更新......这都是对广播的应用,
|