如何在Android上检查互联网访问(发送和接收数据是否成功)?

时间:2015-08-27 16:23:54

标签: android connection network-connection

您好我想检查连接到网络(手机或wifi)的手机或平板电脑。

这个网络访问互联网并发送和接收数据吗?

我使用此代码:

    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo) {
        if (ni.getTypeName().equalsIgnoreCase("WIFI")) {
            if (ni.isConnected()) {
                Toast.makeText(context,"WIFI CONNECTED",Toast.LENGTH_LONG).show();

                Boolean m = isOnline();
                Toast.makeText(context,String.valueOf(m),Toast.LENGTH_LONG).show(); 


            } else {
                Toast.makeText(context,"WIFI NOT CONNECTED AND AVAILABLE",Toast.LENGTH_LONG).show();    
            }


public boolean isOnline() {

    Runtime runtime = Runtime.getRuntime();
    try {

        Process ipProcess = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
        int     exitValue = ipProcess.waitFor();
        return (exitValue == 0);

    } catch (IOException e)          { e.printStackTrace(); } 
      catch (InterruptedException e) { e.printStackTrace(); }

    return false;
}

但它总是返回false

(我在BlueStacks中测试应用程序)。

我测试stackoverflow中存在的所有代码

1 个答案:

答案 0 :(得分:2)

首先,请尝试检查您是否真的已连接:

ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    boolean isConnected = activeNetwork != null &&
                          activeNetwork.isConnectedOrConnecting();

要获得连接类型,请尝试以下方法:

boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;

检查此图片以查看其他连接类型。

enter image description here

不要忘记在清单上添加此行:

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

有关the training的更多信息。

有关ConnectivityManager here的更多信息。

编辑:您还可以尝试以下内容:

ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();

if (info != null) {
    return info.isConnectedOrConnecting();
}

第二次修改:是的,您也可以采用“ping”方法。但是......我认为这不是必要的,你可以简单地尝试上面的解决方案......