美文网首页
Android广播机制之广播接收器(Broadcast Rece

Android广播机制之广播接收器(Broadcast Rece

作者: 浅_若清风 | 来源:发表于2021-05-31 15:11 被阅读0次

    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的广播了。

    4.调用unregisterReceiver()方法取消注册。registerReceiver()方法和unregisterReceiver()必须是成对出现的。如果注册的receiver没有在合适的时候进行销毁,导致内存泄漏,占用内存空间,加重了 SystemService负担,从而触发管控模块抛出异常,导致应用程序崩溃。 img_4.png
    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

    相关文章

      网友评论

          本文标题:Android广播机制之广播接收器(Broadcast Rece

          本文链接:https://www.haomeiwen.com/subject/ehnpsltx.html