Android监测手机网络状态变化的广播

android手机网络发生改变系统会发出相应的广播,我们只需要注册该广播就可以实时监测手机网络的变化了。

首先我们创建一个广播NetworkChangedReceiver继承系统广播BroadcastReceiver,在onReceive方法中做对应网络变化的处理逻辑就可以了:

public class NetworkChangedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        int netWorkStates = NetworkUtil.getNetWorkStates(context);
        
        switch (netWorkStates) {
            case NetworkUtil.TYPE_NONE:
                //断网了
                break;
            case NetworkUtil.TYPE_MOBILE:
                //打开了移动网络
                break;
            case NetworkUtil.TYPE_WIFI:
                //打开了WIFI
                break;

            default:
                break;
        }
    }
}

上述代码中使用到了NetworkUtil工具类,详细代码请看NetworkUtil

广播我们已经创建了,接下来注册就可以监听网络状态了,注册广播可以通过代码注册(动态注册)也可以通过清单文件注册(静态注册),下面分别介绍一下:
1. 代码注册:

NetworkChangedReceiver networkChangedReceiver = new NetworkChangedReceiver();
IntentFilter intentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(networkChangedReceiver, intentFilter);
注意不要忘记在onDestroy()中解除注册
protected void onDestroy() {
        unregisterReceiver(networkChangedReceiver);
        super.onDestroy();
}
2. 清单文件注册:
<receiver
        android:name=".NetworkChangedReceiver">
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
</receiver>
两种注册方式均可,可根据项目中实际需求来决定使用其中一种。
警告:

清单文件注册不能适配android7.0及以上(targetSdkVersion ≥ N,清单文件注册失效,亲测没有收到广播)

原因:Android 7.0后台优化  详情请点击

Android 7.0 移除了三项隐式广播(CONNECTIVITY_ACTIONACTION_NEW_PICTURE 和ACTION_NEW_VIDEO),以帮助优化内存使用和电量消耗。

Android 7.0 应用了以下优化措施:
  1. 面向 Android 7.0 开发的应用不会收到 CONNECTIVITY_ACTION 广播,即使它们已有清单条目来请求接受这些事件的通知。在  前台运行的应用如果使用 BroadcastReceiver 请求接收通知,则仍可以在主线程中侦听 CONNECTIVITY_CHANGE。
  2. 应用无法发送或接收 ACTION_NEW_PICTURE 或 ACTION_NEW_VIDEO 广播。此项优化会影响所有应用,而不仅仅是面向 Android 7.0 的应用。

现在不适配Android 7.0应该不可能了,所以大家就不要考虑清单文件注册了,直接代码动态注册就行了。

如果您对Android 7.0这一变更感觉不适应或者变更限制了您开发的需求,Android 框架提供多个解决方案来缓解对这些隐式广播的需求。例如,JobScheduler API 提供了一个稳健可靠的机制来安排满足指定条件(例如连入无限流量网络)时所执行的网络操作。您甚至可以使用JobScheduler 来适应内容提供程序变化。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值