2013-08-07 5 views
0

Я проверяю состояние сети устройства. с помощью: -Проверьте, есть ли сайт

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

Я хочу взять это на немного дальше и проверить, если устройство может получить доступ к Интернету или данный сайт такой как http://www.google.com и если он может затем вернуться истинным, и если он может» затем верните значение false.

Проблема с моим кодом заключается в том, что он вернет true, если устройство подключено к маршрутизатору, а маршрутизатор отключен. Мне нужна фактическая проверка подключения к Интернету.

Измененный код

public void GoToStation(View v) 
{ 

    try { 
     InetAddress ina = InetAddress.getByName("http://188.65.176.98/"); 

     if(ina.isReachable(3000)) { 

        Intent myIntent = new Intent(MainActivity.this, CustomizedListViewStation.class); 
        startActivityForResult(myIntent, 0); 

     } else { 
      Toast.makeText(this, "You need a data connection to view Safety Zones", Toast.LENGTH_LONG).show(); 
     } 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 

    } 
+0

В какой системе вы проверяете это. –

+0

Предлагаю вам прочитать эту тему. Может быть, что вы ищете: http://stackoverflow.com/questions/3905358/how-to-ping-external-ip-from-java-android – Aleks

+0

Приносим извинения, что это приложение для Android. –

ответ

1

Для проверки фактического подключения к Интернету, вы можете попытаться получить доступ к какой-то удаленный сервер. Например:

try { 
    InetAddress ina = InetAddress.getByName([server]); 

    if(ina.isReachable(3000)) { 
     System.out.println("Internet Connection"); 
    } else { 
     System.out.println("No internet connection"); 
    } 
} catch (IOException ioe) { 
    ioe.printStackTrace(); 

} 

Где [server] это сервер, чтобы попытаться подключиться. Вы должны использовать свой собственный сервер для этого, так как грубо использовать чужую полосу пропускания для этой цели (плюс использование собственного сервера является более надежным).

Другой маршрут - проверить, есть ли Android API, который делает это, так как Android проверяет подключение к серверам Google. Я не уверен, что этот статус отображается в API нигде.

+0

shanet Спасибо за ответ. Как я могу добавить ваш пример в код, который у меня уже есть, чтобы он возвращал true для соединения и false для отсутствия соединения при возврате activeNetworkInfo! = Null && activeNetworkInfo.isConnected(); –

+0

@RobbieBirkett Отбросьте его в функции и замените строки println на 'return true/false'. Я также должен добавить, что это (очевидно) делает сетевой ввод-вывод, поэтому он должен быть помещен в не-пользовательский поток или Android будет жаловаться. – shanet

+0

Что бы я поставил где [сервер]? URL такой, как моя домашняя страница? –

2

Вы могли бы сделать что-то вроде этого:

boolean isAvailable(URL url){ 
    try { 
     HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
     urlConnection.connect(); 
     urlConnection.disconnect(); 
     return true; 
    } catch (IOException e) { 
      Log.e(TAG, "Exception", e); 
    } 
    return false; 
} 
+0

Открытие полного HTTP-соединения кажется немного тяжелым, чтобы проверить, имеет ли пользователь активное интернет-соединение. – shanet

Смежные вопросы