«

android 检测网络状况

时间:2024-3-2 19:12     作者:韩俊     分类: Android


一.编写目的

在android开发中,很多时候我们都需要网络交互数据。但在这之前,我们一般会判断网络,这样一方面能使代码更合理,避免无谓的网络访问,另一方面我们可以给用户一个友好的提示,让用户知道网络不通,一些操作无法进行下去。当然还有些做网络测试程序的时候也能用的到。

二.判断网络状况
2.1 利用android原生api中的方法来判断

2.1.1 加入权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2.1.2 获取是否有本地网络

   public static boolean IsHaveInternet(final Context context) {
        try {
            ConnectivityManager manger = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = manger.getActiveNetworkInfo();
            Log.e("info;", info + "..");

            return (info != null);
        } catch (Exception e) {
            return false;
        }
    }

2.1.3 优缺点

优点:这样能很快很方便的判断是否有本地网络。缺点:这样虽然判断设备有本地网络,但本地网络是否有效,是否能连接目标网络,这些就无法判断了。

2.2 利用http连接来判断网络状况

2.2.1 添加网络权限

 <uses-permission android:name="android.permission.INTERNET" />

2.2.2 判断是否有网络连接

public static boolean isConnect(Context context) {
        // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理)
        try {
            HttpClient client = new DefaultHttpClient();
            HttpGet get = new HttpGet("http://www.baidu.com");
            HttpResponse response = client.execute(get);
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                return true;
            }
        } catch (Exception e) {
            Log.v("error", e.toString());
        }
        return false;
    }

我例子中是用的百度来测试外网是否通畅,如果服务器是内场中使用,使用wifi局域网的话,用百度网址来判断就不太靠谱了,这个时候就需要使用apk正在使用的服务器地址来判断了,呵呵。

2.2.3 优缺点

优点:这样能判断外网是否通畅。缺点:也必须一次网络请求。

2.3 使用ping来测试网络

2.3.1 添加网络权限

  <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

2.3.2 判断ping目标网络是否成功

   public String Ping(String str) {
        String result = "";// ping的结果
        Process p;
        try {
            // ping -c 2 -w 100 中 ,-c 是指ping的次数 3是指ping 2次 ,-w 30
            // 以秒为单位指定超时间隔,是指超时时间为30秒
            p = Runtime.getRuntime().exec("ping -c 2 -w 30 " + str);
            int status = p.waitFor();// 等待响应码
            InputStream input = p.getInputStream();
            BufferedReader in = new BufferedReader(new InputStreamReader(input));
            final StringBuffer buffer = new StringBuffer();
            String line = "";
            while ((line = in.readLine()) != null) {
                buffer.append(line + "nr");
            }
            if (status == 0) {
                buffer.append("nr " + "success");
            } else {
                buffer.append("nr " + "faild");
            }
            result = buffer.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return result;
    }

我这边返回的是ping的具体内容,如果只是要判断网络是否通畅,用status判断就行了。

2.3.3 优缺点:

优点:判断网络很方便。缺点:虽然也有网络请求,但这是这也是必须的。

三.总结

以上介绍了几种判断网络的方法,有些大家可能比较陌生,有些大家比较熟悉。但有一句话说的好,不管是白猫,还是黑猫,抓的住老鼠就是好猫。总之选择最对的方法就是最好的方法。


标签: android

热门推荐