android監聽當前的網絡

jopen 8年前發布 | 7K 次閱讀 Android開發 移動開發

之前我聽騰訊一個同事說,用android原本的監聽網絡方式,是不能保證的,原因是,現在的WiFi都需要通過瀏覽器驗證

所以采用ping ip才能保證網絡是連通的。

public class NetUtils {
    private final static String TAG = "NetUtils";

    /**
     * 判斷當前網絡是否打開
     *
     * @param context
     * @return
     */
    public static boolean isNetOpen(Context context) {
        boolean bisConnFlag = false;
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        if (activeNetworkInfo != null) {
            bisConnFlag = connectivityManager.getActiveNetworkInfo().isAvailable();
        }
        return bisConnFlag;
    }

    /**
     * 判斷是否為WiFi
     *
     * @param context
     * @return
     */
    public static boolean isWifi(Context context) {
        ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        if (activeNetworkInfo != null && activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
            return true;
        }
        return false;
    }

    public static final boolean ping(String ip) {
        String result = null;
        try {
            String testIP = "baidu.com";
            if (!TextUtils.isEmpty(ip)) {
                testIP = ip;
            }
            Process process = Runtime.getRuntime().exec("ping -c 3 -w 100 " + testIP);//ping 3次
            //讀取ping的內容
            InputStream inputStream = process.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            StringBuffer stringBuffer = new StringBuffer();
            String content = "";
            while ((content = bufferedReader.readLine()) != null) {
                stringBuffer.append(content);
            }
            Log.e(TAG, "result content:" + stringBuffer.toString());
            //ping的狀態
            int status = process.waitFor();
            if (status == 0) {
                result = "successful";
                return true;
            } else {
                result = "failed cannot reach the IP address";
            }
        } catch (IOException e) {
            result = "failed IOException";
        } catch (InterruptedException e) {
            result = "failed InterruptedException";
        } finally {
            Log.e(TAG, result);
        }
        return false;
    }
}


來自: http://my.oschina.net/moziqi/blog/531937?fromerr

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!