美文网首页
Android 广播机制(Broadcast)

Android 广播机制(Broadcast)

作者: 风之化身呀 | 来源:发表于2019-07-08 22:00 被阅读0次

    1、基本概念

    • Android 的广播机制是为了系统级别的消息通信。不论是系统广播还是其他应用程序的广播,都可以注册监听。
    • 分为标准广播和有序广播。标准广播是全局的,所有的广播接收器几乎会在同一时间获取到,无先后之分,无截断之说;有序广播是一种串行广播,同一时刻只有一个接收器接收,可通过设置优先级来决定接收顺序,而且可以截断
    • 常见广播:开机、电量变化、时间时区发生变化等
    • 有动态注册和静态注册两种方式注册广播接收器

    2、基本用法

    2.1、动态注册

    1、通过 IntentFilter 确定监听何种类型的广播

    private IntentFilter intentFilter = new IntentFilter();\
    intentFileter.addAction("android.net.conn.CONNECTIVITY_CHANGE")
    

    2、初始化一个继承 BroadcastReceiver 类的实例

    class NetworkChangeReceiver extends BroadcastRecerver {
        @override
        public void onReceive(Context context,Intent intent){
            Toast.makeText(context,"network change",Toast.LENGTH_SHORT).show();
        }
    }
    

    3、通过 registerReceiver 绑定两者

    registerReceiver(networkChangeReceiver,intentFilter)
    

    4、销毁时 unRegisterReceiver 解除绑定

    unRegisterReceiver (networkChangeReceiver)
    

    2.2、静态注册

    1、在 AndroidManifest.xml 中写一个 receiver 标签,表明目的。注意需要申明权限

          <uses-permission android:name="android.permission.RECEIVE_BOOT_STATE" />
          <receiver 
                android:name=".BootReceiver"
                android:enabled="true"
                android:exported="true"
                >
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED"></action>
                </intent-filter>
            </receiver>
    

    2、写一个类BootReceiver 继承 BroadcastRecerver

    class BootReceiver extends BroadcastRecerver {
        @override
        public void onReceive(Context context,Intent intent){
            Toast.makeText(context,"boot",Toast.LENGTH_SHORT).show();
        }
    }
    

    2.3、自定义广播(静态注册模式)

    1、在 AndroidManifest.xml 中写一个 receiver 标签,表明目的。注意需要申明权限
    2、调用 sendBroadcast(intent) 方式发送自定义广播

    Intent intent = new Intent("com.example.xxx.MY_BROADCAST")
    sendBroadcast(intent)
    

    3、若要发送有序广播,则调用 sendOrderedBroadcast。同时可以在 AndroidManifest.xml 中给 intent-filter 设置 priority 指定优先级,若不想继续传播,则可以调用 abortBroadcast()

    Intent intent = new Intent("com.example.xxx.MY_BROADCAST")
    sendOrderedBroadcast(intent,null)
    

    2.4、使用本地广播 LocalBroadcastManger

    以上都是全局广播,任何应用都可监听,存在安全性问题,可用 LocalBroadcastManger 使用本地广播解决该问题。

    private LocalBroadcastManger  localBroadcastManger 
    localBroadcastManger = LocalBroadcastManger.getInstance(this)
    
    Intent intent = new Intent("com.example.xxx.MY_BROADCAST")
    localBroadcastManger.sendBroadcast(intent)
    
    private IntentFilter intentFilter = new IntentFilter();\
    intentFileter.addAction("android.net.conn.CONNECTIVITY_CHANGE")
    localBroadcastManger.registerReceiver(networkChangeReceiver,intentFilter)
    

    相关文章

      网友评论

          本文标题:Android 广播机制(Broadcast)

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