receiver

更新时间:2023-01-04 17:36:30 阅读: 评论:0


2023年1月4日发(作者:韩国综艺天生缘分)

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小时内删除。

上一篇:tidy
下一篇:thicket
标签:receiver
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图