Android⼴播机制之⼴播接收器(BroadcastReceiver)
Andriod提供了⼀套完整的API,允许应⽤程序⾃由的发送和接收⼴播。⽽接收⼴播的⽅法则需要引⼊⼀个新的概念——⼴播接收器(Broadcast
Receiver)。
注册⼴播的⽅式⼀般有以下两种:
⼀.动态注册:在代码中注册
例:动态注册监听⽹络变化
1.声明IntentFilter(Intent过滤器)和NetworkChangeReceiver(⽹络变化接收器)
img_
2.定义继承于BroadcastReceiver的内部类NetworkChangeReceiver,并重写⽗类的onReceive()⽅法,以便于每当⽹络状态发⽣变化
时,onReceive()⽅法都会得到执⾏。在onReceive()⽅法中添加如下图代码
img_
ConnectivityManager是专门⽤于管理⽹络连接的系统服务类。NetworkInfo和NetworkCapabilities类⽤于表⽰⽹络的功能,其中
NetworkInfo在APIlevel29中已过时,NetworkCapabilities最低⽀持Android6.0版本。
3.在onCreate()中,添加如下图代码
img_
分别创建IntentFilter和NetworkChangeReceiver实例,其中IntentFilter⾥添加⼀个action,action为想要监听的⼴播,我这⾥想要监听⽹络
的变化,所以发送⼀条值为TIVITY_CHANGE的⼴播。调⽤registerReceiver()⽅法进⾏注册,传⼊
NetworkChangeReceiver和IntentFilter的实例,这样NetworkChangeReceiver就会收到值为TIVITY_CHANG
的⼴播了。
4.调⽤unregisterReceiver()⽅法取消注册。registerReceiver()⽅法和unregisterReceiver()必须是成对出现的。如果注册的receiver没有在合
适的时候进⾏销毁,导致内存泄漏,占⽤内存空间,加重了SystemService负担,从⽽触发管控模块抛出异常,导致应⽤程序崩溃。
img_
5.声明权限。Android系统为了保护⽤户设备的安全和隐私,做了严格的规定:如果程序需要进⾏⼀些敏感类操作,必须在配置⽂件中进⾏声明。
⽐如本案例中的访问系统⽹络状态就属于敏感类操作,必须要声明权限。在⽂件⾥添加代码:
android:name="_NETWORK_STATE"/>
img_
⼆.静态注册:在⽂件中注册
动态注册的⼴播接收器可以⾃由地控制注册和注销,但必须要在程序启动后才能接收到⼴播。如果要在程序未启动的情况下接收到⼴播,我们可以
使⽤静态注册的⽅式。
例:接收⼀条开机⼴播
1.创建接收器。右击src->main->java⽬录下的包,选择New->Other->BroadcastReceiver
img_
命名你的⼴播接收器,勾选Exported和Enabled选项,点击Finish。接收器创建成功。其中Exported属性表⽰是否允许接收本程序以为的⼴
播,Enabled属性表⽰是否启⽤该⼴播接收器。
img_
2.打开⽂件,我们会发现在application闭包了,系统⾃动的添加了receiver标签,所有的静态⼴播接收器都是在这⾥进⾏
注册的。在manifest闭包⾥添加
以及在在receiver标签⾥新增代码
img_
本文发布于:2023-01-04 17:36:30,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/91967.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |