Android 测试网络连接

5

我希望能够进行一项测试以验证互联网连接,我不想检查网络状态,因为它仅检测我是否在设备上激活了互联网,而我想要检查是否可以连接到互联网。类似于ping的东西。


在此处查看检测互联网连接的最短方法:https://dev59.com/-2kw5IYBdhLWcg3w6Opy#24692766 - Zar E Ahmer
@Nepster这并没有达到问题的目的。 - therealprashant
3个回答

11

请尝试以下方法:

public boolean checkOnlineState() {
    ConnectivityManager CManager =
        (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo NInfo = CManager.getActiveNetworkInfo();
    if (NInfo != null && NInfo.isConnectedOrConnecting()) {
        return true;
    }
    return false;
}

不要忘记访问权限

 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
否则
if (InetAddress.getByName("www.xy.com").isReachable(timeout))
{    }
else
{    }

这个功能很好,但是它只检查我是否已激活了我的WiFi、3G,我想要检查是否存在互联网连接,例如,有时我们连接了WiFi但互联网已经断开了,这会检查我是否已打开WiFi。 - Loreln
好的,那么你应该使用:if (InetAddress.getByName("google.com").isReachable(2000)) - Oli
isConnectedOrConnecting在API级别28中已被弃用。应用程序应改为使用ConnectivityManager.NetworkCallback API来了解连接更改。ConnectivityManager.registerDefaultNetworkCallback(ConnectivityManager.NetworkCallback)和ConnectivityManager.registerNetworkCallback(NetworkRequest,PendingIntent)将更准确地显示设备的连接状态,并使应用程序更轻松快速地对更改做出反应。 - Christian

1

它对我有效:

验证网络可用性:

private Boolean isNetworkAvailable() {
    ConnectivityManager connectivityManager 
          = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnectedOrConnecting();
}

验证互联网访问:

public Boolean isOnline() {
    try {
        Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com");
        int returnVal = p1.waitFor();
        boolean reachable = (returnVal==0);
        return reachable;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return false;
}

您验证互联网连接的方法对我很有效...除了Android 4.3 Jellybean,我不知道为什么。 - Josh

0
使用此代码检查互联网连接,它会检查设备上的所有互联网连接。并确保您已在清单中添加了Internet权限。
    boolean flag=false;
    ConnectivityManager connectivity = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity != null)
    {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null)
            for (int i = 0; i < info.length; i++)
                if (info[i].getState() == NetworkInfo.State.CONNECTED)
                {
                    flag=true;

                }

    }
    if(flag==true)
    {
         Log.e("TAG","Internet Is Connected");
    }
    else
    {
          Log.e("TAG","Internet Is Not Connected");
    }

getAllNetworkInfo()需要ACCESS_NETWORK_STATE权限。 - Lorne Laliberte
该方法不会检测您连接的Wifi热点是否也具有互联网。 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接