NetWorkStateReceiver.java 3.46 KB
package com.cnlive.goldenline.util;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkInfo;
import android.util.Log;

/**
 * Created by gujun on 2017/3/23.
 */

public class NetWorkStateReceiver extends BroadcastReceiver {
    private final String TAG = "NetWorkStateReceiver";
    public static final int ONLY_MOBILE_CONNECT = 0x4001;
    public static final int ONLY_WIFI_CONNECT = 0x4002;
    public static final int NO_CONNECT = 0x4003;

    private NetStateListener l;

    public NetWorkStateReceiver(NetStateListener listener) {
        this.l = listener;
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        Log.d(TAG, "onReceive: 网络状态发生变化");
        //检测API是不是小于23,因为到了API23之后getNetworkInfo(int networkType)方法被弃用
        if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) {

            //获得ConnectivityManager对象
            ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

            //获取ConnectivityManager对象对应的NetworkInfo对象
            //获取WIFI连接的信息
            NetworkInfo wifiNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            //获取移动数据连接的信息
            NetworkInfo dataNetworkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            if (wifiNetworkInfo.isConnected()) {
                if (l != null)
                    l.onNetStateChange(ONLY_WIFI_CONNECT);
            } else if (dataNetworkInfo.isConnected()) {
                if (l != null)
                    l.onNetStateChange(ONLY_MOBILE_CONNECT);
            } else {
                if (l != null)
                    l.onNetStateChange(NO_CONNECT);
            }
            //API大于23时使用下面的方式进行网络监听
        } else {
            Log.d(TAG, "onReceive: API level 大于23");
            //获得ConnectivityManager对象
            ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

            //获取所有网络连接的信息
            Network[] networks = connMgr.getAllNetworks();
            //用于存放网络连接信息
            StringBuilder sb = new StringBuilder();
            //通过循环将网络信息逐个取出来
            for (int i = 0; i < networks.length; i++) {
                //获取ConnectivityManager对象对应的NetworkInfo对象
                NetworkInfo networkInfo = connMgr.getNetworkInfo(networks[i]);
                sb.append(networkInfo.getTypeName() + " connect is " + networkInfo.isConnected());
                if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE && networkInfo.isConnected()) {
                    if (l != null)
                        l.onNetStateChange(ONLY_MOBILE_CONNECT);
                } else if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI && networkInfo.isConnected()) {
                    if (l != null)
                        l.onNetStateChange(ONLY_WIFI_CONNECT);
                } else {
                    if (l != null)
                        l.onNetStateChange(NO_CONNECT);
                }
            }
        }
    }

    public interface NetStateListener {
        void onNetStateChange(int state);
    }
}