【问题标题】:requestRouteToHost always returns falserequestRouteToHost 总是返回 false
【发布时间】:2026-02-24 17:05:02
【问题描述】:

请检查以下代码

 public boolean isOnline() {

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
 int networkType = ConnectivityManager.TYPE_WIFI; 
return cm.requestRouteToHost(networkType, lookupHost("http://www.ati.ag"));
 //return cm.getActiveNetworkInfo().isConnectedOrConnecting();

}

  public static int lookupHost(String hostname) {
InetAddress inetAddress;
try {
    inetAddress = InetAddress.getByName(hostname);
} catch (UnknownHostException e) {
    return -1;
}
byte[] addrBytes;
int addr;
addrBytes = inetAddress.getAddress();
addr = ((addrBytes[3] & 0xff) << 24)
        | ((addrBytes[2] & 0xff) << 16)
        | ((addrBytes[1] & 0xff) << 8)
        |  (addrBytes[0] & 0xff);
System.out.println(addr);
return addr;

}

isOnline 总是返回 false ,请帮助它是如何工作的? 或者请告诉我检查服务器连接的任何其他方式 基本目的是检查本地 wifi 是否可以使用互联网

【问题讨论】:

    标签: android android-wifi


    【解决方案1】:

    你需要为InetAddress.getByName指定一个主机名,而不是一个URL,所以这一行:

    return cm.requestRouteToHost(networkType, lookupHost("http://www.ati.ag"));
    

    应该是:

    return cm.requestRouteToHost(networkType, lookupHost("www.ati.ag"));
    

    这可能会更好。

    【讨论】:

    • 现在我意识到有一个古老的未解决的问题。一种可能的解释是它没有实现。见:*.com/a/2680765/972850
    【解决方案2】:

    作为您的方法的替代方案,如果您的目的只是检查 Wifi 是否可用,您可以试试这个。这对我有用:

    ConnectivityManager cm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    if(cm==null)
        return false;
    NetworkInfo networkInfo=cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if(networkInfo==null)
        return false;
    return networkInfo.isConnected();
    

    【讨论】:

    最近更新 更多