Android8.0广播

做一个Android监听网络实时变化,于是想到了广播。于是乎按照实现一个广播步骤:

1.新建一个类继承广播,在广播内判断网络变化。当网络发生变化时,给定义的接口发送通知。具体代码如下

public class NetBroadcastReceiver extends BroadcastReceiver {

    public NetEvevt evevt = BaseAct.evevt;
    public NetEvevt baseLazyEvevt = BaseLazyLoadFragment.evevt;

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        // 如果相等的话就说明网络状态发生了变化  
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            int netWorkState = NetUtil.getNetWorkState(context);
            // 接口回调传过去状态的类型
            if (evevt != null)
                evevt.onNetChange(netWorkState);
            if (baseLazyEvevt!=null)
                baseLazyEvevt.onNetChange(netWorkState);
        }
    }

    // 自定义接口
    public interface NetEvevt {
        public void onNetChange(int netMobile);
    }

2.注册广播,在AndroidMainfest.xml文件中注册刚才自己的广播。注册代码如下

<receiver android:name=".ui.receiver.NetBroadcastReceiver">
     <intent-filter>
         <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
     </intent-filter>
 </receiver>

        于是做完上面操作,运行程序,进行断网,连网测试。发现Android 4.4 和 Android 6.0运行没问题。但是Android8.0上面接收不到广播。于是百度发现,原来原因是:在Android8.0行为变更,静态注册的广播将接收不到 

        解决方案是,需要动态注册。于是在Application里面进行该广播的动态注册,注册代码如下:

NetBroadcastReceiver receiver = new NetBroadcastReceiver ();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
this.registerReceiver(receiver, intentFilter);

在运行Android8.0完美兼容。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值