requestRouteToHost всегда возвращает false

пожалуйста, проверьте следующий код

 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, пожалуйста, помогите, как это работает? Или, пожалуйста, расскажите мне о любом другом способе проверки подключения к серверу. Основная цель - проверить, доступен ли Интернет по локальному Wi-Fi или нет.


person Ali    schedule 16.12.2011    source источник


Ответы (2)


Вам нужно указать имя хоста InetAddress.getByName, а не URL-адрес, поэтому эта строка:

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

Должно быть:

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

Вероятно, это будет работать лучше.

person gimix    schedule 16.12.2011
comment
Теперь я понимаю, что есть старый вопрос без ответа по этому поводу. Одно из возможных объяснений состоит в том, что он не реализован. См.: stackoverflow.com/a/2680765/972850. - person gimix; 16.12.2011

В качестве альтернативы вашему подходу, если ваша цель состоит только в том, чтобы проверить, доступен ли Wi-Fi, вы можете попробовать это. Это сработало для меня:

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();
person gimix    schedule 16.12.2011
comment
Вопрос касается Интернета через Wi-Fi, посмотрите на проблему здесь stackoverflow.com/questions/6493517/ - person Gaurav Agarwal; 29.05.2012