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 来适应内容提供程序变化。

    原文作者:github_2011
    原文地址: https://blog.csdn.net/github_2011/article/details/72780927
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞