Andriod提供了一套完整的API,允许应用程序自由的发送和接收广播。而接收广播的方法则需要引入一个新的概念——广播接收器(Broadcast Receiver)。
注册广播的方式一般有以下两种:
一.动态注册:在代码中注册
例:动态注册监听网络变化
1.声明IntentFilter (Intent过滤器)和NetworkChangeReceiver(网络变化接收器)
img_1.png
2.定义继承于BroadcastReceiver的内部类NetworkChangeReceiver,并重写父类的onReceive()方法,以便于每当网络状态发生变化时,onReceive()方法都会得到执行。在onReceive()方法中添加如下图代码 img_2.png
ConnectivityManager是专门用于管理网络连接的系统服务类。 NetworkInfo和NetworkCapabilities类用于表示网络的功能,其中NetworkInfo在API level 29中已过时,NetworkCapabilities最低支持Android 6.0版本。
3.在onCreate()中,添加如下图代码 img_3.png
分别创建IntentFilter和NetworkChangeReceiver实例,其中IntentFilter里添加一个action,action为想要监听的广播,我这里想要监听网络的变化,所以发送一条值为android.net.conn.CONNECTIVITY_CHANGE的广播。调用registerReceiver()方法进行注册,传入NetworkChangeReceiver和IntentFilter的实例,这样NetworkChangeReceiver就会收到值为android.net.conn.CONNECTIVITY_CHANG的广播了。
5.声明权限。Android系统为了保护用户设备的安全和隐私,做了严格的规定:如果程序需要进行一些敏感类操作,必须在配置文件中进行声明。比如本案例中的访问系统网络状态就属于敏感类操作,必须要声明权限。在AndroidManifest.xml文件里添加代码:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
img_5.png
二.静态注册:在AndroidManifest.xml文件中注册
动态注册的广播接收器可以自由地控制注册和注销,但必须要在程序启动后才能接收到广播。如果要在程序未启动的情况下接收到广播,我们可以使用静态注册的方式。
例:接收一条开机广播
1.创建接收器。右击src->main->java目录下的com.example.xxx包,选择New->Other->Broadcast Receiver img_6.png命名你的广播接收器,勾选Exported和Enabled选项,点击Finish。接收器创建成功。其中Exported属性表示是否允许接收本程序以为的广播,Enabled属性表示是否启用该广播接收器。 img_7.png
2.打开AndroidManifest.xml文件,我们会发现在application闭包了,系统自动的添加了receiver标签,所有的静态广播接收器都是在这里进行注册的。在manifest闭包里添加
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />,
以及在在receiver标签里新增代码
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
img_8.png
网友评论