2013-05-08 3 views
2

Итак, мой вопрос заключается в том, как проверить, получаю ли я данные или нет. Сценарий заключается в том, что я подключен к Wi-Fi-сети, такой как Starbucks wifi (какой пользователь должен сначала подключиться к сети, а затем принять соглашение до получения каких-либо данных.) Этот код не служит моей цели.Как проверить доступ в Интернет?

ConnectivityManager cm = 
     (ConnectivityManager) _mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnected()) { 
     return true; 
    } 
    return false; 

Он возвращает true, когда я подключен к сети, но пока что не принял это соглашение. Спасибо,

+1

Если вы хотите знать, для _sure_, вам необходимо отправить запрос на сервер, когда IsConnected верно, и посмотреть, если вы получите ответ , –

+0

Я думаю, вы правы. Однако я не пробовал. –

ответ

0

Невозможно это знать, потому что это не то, что обрабатывается на уровне ОС - его обрабатывают на маршрутизаторе. ОС только знает, завершила ли она квитирование с маршрутизатором и получила IP-адрес. Будет ли маршрутизатор бросать его на экран входа в систему, выходит за рамки ОС.

+0

Спасибо за ответ, я думаю, что нет способа не очень точно. Я думаю, если я попытаюсь подключиться к веб-сайту, например Google, я могу проверить, нет ли каких-либо данных или нет. это правильно? Однако я стараюсь не реализовывать свою собственную логику. –

+0

Нет, вы бы получили ответ в любом случае. Эти вещи обычно реализуются путем перенаправления всего трафика на веб-сайт. Вы можете отправить запрос на свой собственный веб-сайт, который вернет фиксированный ответ и сравните возвращаемые данные. Но это хорошая работа, уверены ли вы, что у вас есть достаточно полезности из этой функции, чтобы туда попасть? –

+0

Я думаю, ты прав. В этом мало пользы. –

0

Вы можете проверить это, пытаясь выполнить ping-сайт. Например

 try { 
      Socket s = new Socket("www.google.com", 80); 
      return s.getLocalAddress().getHostAddress(); 
          // network connection available 
     } catch (Exception e) { 
      // no network connection 
     } 

Я не пробовал это thogh .. Но я думаю, что это должно сработать.

Если он не работает, вы можете попробовать другое. Отправьте httprequest в google и дождитесь ответа.

+0

Это не работает, спасибо. –

0

Мое приложение подключается к сети веб-сервисов, работающих на веб-сервере в облаке. Поэтому мне нужно убедиться, что это соединение установлено до того, как мое приложение попытается сделать что-то. Вместо того, чтобы пытаться проверить, доступен ли интернет, все, что я делаю, это вызов одной из моих услуг. У меня есть простой метод TestService, который просто возвращает слово «успех». Поэтому мое приложение вызывает службу, получает строку «успех» и знает, что она подключена к Интернету и успешно достигает моих услуг. Мне не нужно беспокоиться о ConnectivityManager и NetworkInfo, потому что это решение работает хорошо.

Конечно, если мои услуги сами должны были спуститься вниз, то я точно не знаю, подключается ли устройство к Интернету, я бы точно знал, что он не доходит до моего обслуживания. Тем не менее, а) я убеждаюсь, что мои услуги являются избыточными и имеют 99,9% времени безотказной работы, и б) мое приложение не будет очень полезно, если не будет подключаться к моим услугам. Альтернативой просто проверке в Интернете может быть попытка подключиться к государственной службе от авторитетной компании, которая, как вы знаете, всегда будет в сети.

0

Вот что я бежал в AsyncTask:

public Boolean testServer(){ 
    //stackoverflow.com/questions/9552743/proper-way-to-test-if-server-is-up-in-java  
    //stackoverflow.com/questions/9180072/android-check-connection-to-server 
    Boolean boolconnect = false; 

    try { 
      myUrl = new URL(UPLOAD_URL); 
      connection = myUrl.openConnection(); 
      connection.setConnectTimeout(30*1000); 
      connection.connect(); 
      Log.i(TAG, "FROM SERVER Connection made to: " + UPLOAD_URL); 
      boolconnect = true; 

    } catch (SocketException e) { 
     // TODO Auto-generated catch block 
     Log.i(TAG, "FROM SERVER socket exception:" + e); 
    } catch (UnknownHostException e) { 
     // TODO Auto-generated catch block 
     Log.i(TAG, "FROM SERVER Unknown host:" + e); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     Log.i(TAG, "FROM SERVER IOexception:" + e); 
    } 
    return boolconnect; 
} 
+0

Этот код также не работает. –

+0

вам нужно будет уточнить – Stagleton

+0

Что не ясно? Спасибо за код, но когда я попробовал код, возвращаемое значение все еще было истинным, прежде чем принимать соглашение, которое должно быть ложным. –

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