Android中判断网络连接是否可用及监控网络状态

Android中判断网络连接是否可用及监控网络状态

package com.meinv.mymeinv.tool;        import android.content.Context;        import android.net.ConnectivityManager;        import android.net.NetworkInfo;        import java.io.BufferedReader;        import java.io.IOException;        import java.io.InputStream;        import java.io.InputStreamReader;/** * Created by DELL zhanghuirong on 2018/11/16. */public class IsNetWorkUtil {    public boolean isNetworkConnected(Context context) {        //判断是否有网络连接        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();            if (mNetworkInfo != null) {                return mNetworkInfo.isAvailable();            }        }        return false;    }    //判断wifi网络是否可用    public boolean isWifiConnected(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mWiFiNetworkInfo = mConnectivityManager                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI);            if (mWiFiNetworkInfo != null) {                return mWiFiNetworkInfo.isAvailable();            }        }        return false;    }    //判断手机网络是否可用    public boolean isMobileConnected(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mMobileNetworkInfo = mConnectivityManager                    .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);            if (mMobileNetworkInfo != null) {                return mMobileNetworkInfo.isAvailable();            }        }        return false;    }    //获取当前网络连接的类型信息    public static int getConnectedType(Context context) {        if (context != null) {            ConnectivityManager mConnectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();            if (mNetworkInfo != null && mNetworkInfo.isAvailable()) {                return mNetworkInfo.getType();            }        }        return -1;    }//    有时候我们连接上一个没有外网连接的WiFi或者有线就会出现这种极端的情况,目前Android SDK还不能识别这种情况,一般的解决办法就是ping一个外网    /* @author suncat     * @category 判断是否有外网连接(普通方法不能判断外网的网络是否连接,比如连接上局域网)     * @return     */    public static final boolean ping() {        String result = null;        try {            String ip = "www.baidu.com";// ping 的地址,可以换成任何一种可靠的外网            Process p = Runtime.getRuntime().exec("ping -c 3 -w 100 " + ip);// ping网址3次            // 读取ping的内容,可以不加            InputStream input = p.getInputStream();            BufferedReader in = new BufferedReader(new InputStreamReader(input));            StringBuffer stringBuffer = new StringBuffer();            String content = "";            while ((content = in.readLine()) != null) {                stringBuffer.append(content);            }//            Log.d("------ping-----", "result content : " + stringBuffer.toString());            // ping的状态            int status = p.waitFor();            if (status == 0) {                result = "success";                return true;            } else {                result = "failed";            }        } catch (IOException e) {            result = "IOException";        } catch (InterruptedException e) {            result = "InterruptedException";        } finally {//            Log.d("----result---", "result = " + result);        }        return false;    }}