Android BroadcastReceiver详解

1. 什么是广播

BroadcastReceiver是android四大组件之一,四大组件一般是需要在Manifest.xml清单文件注册,但广播可以在代码中动态注册。

每一个应用都可以注册去接收系统或者其他应用发出的广播,自己也可以发送广播。例如系统开机就会发送

android.intent.action.BOOT_COMPLETED,我们可以接受广播,作为触发器。

2. 广播的分类  

一般广播在发送的时候,总是被接收者同时接受。但是有序广播就按接收者的优先级来传递。

 1. 发送标准(异步无序)广播

Intent intent=new Intent("自定义字符串");

sendBroadCast(intent);

 2. 发送有序广播

Intent intent=new Intent("自定义字符串");

sendOrderBroadcast(intent,null//权限相关字符串)

在manifest注册的receiver里 android:priority="100" 属性可以设置优先级

在广播接受者类中的onReceive方法中abordBroadcast();可以中断广播,不会再继续传递。

 

3. 静态注册和动态注册接受系统广播

1. 动态注册接收网络广播

public class MyNetworkReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
      
        ConnectivityManager connectivityManager = 
        (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = connectivityManager.getActiveNetworkInfo();
        if ( info != null && info.isAvailable()){
            //当前网络状态可用
            int netType = info.getType();
            if (netType == ConnectivityManager.TYPE_WIFI){
                Log.e("NETSTATUE", "wifi");
            }else if (netType == ConnectivityManager.TYPE_MOBILE ){
                Log.e("NETSTATUE", "mobile");
            }
        }else {
            //当前网络不可用
            Log.e("NETSTATUE", "无网络连接");
        }
    }
}
MyNetworkReceiver receiver = new MyNetworkReceiver();
IntentFilter intentFilter = new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(receiver, intentFilter);

//在onDestroy中取消注册
unregisterReceiver(mReceiver);

2. 静态注册接收开机广播

 加上用户权限RECEIVE_BOOT_COMPLETE

public class BootCompletedBroadcastReceiver extends BroadcastReceiver {

    private final String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (ACTION_BOOT.equals(intent.getAction())) {
            Intent i = new Intent(context,SplashActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(i);
        }
    }
}
<receiver
        android:name=""
        android:enable="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETE"/>
        </intent-filter>
</receiver>

3. 使用本地广播发送自定义广播

本地广播的优点 高效,广播不会离开本应用,也不会接受外部的广播

Intent intent = new Intent("xxxxxxx");
LocalBroadCastManager lbm=LocalBroadCastManager.getInstance(this);

LocalReceiver localReceiver=new LocalReceier();

lbm.sendBroadcastReceiver(intent);

ibm.registerReceiver(localReceiver,intentFilter);

//在onDestroy中取消注册
ibm.unregisterReceiver(localReceiver);


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值