2015-02-01 2 views
0

Я пытаюсь написать программу для Android, чтобы проверить подключение к Интернету двумя разными способами. Первый - наиболее распространенный метод CheckInternetConnection(), а второй метод - подключение к веб-сайту ConnectGoogleTest(). Первый работает отлично, но во втором мой планшет висит! кто-нибудь знает почему?проверка подключения к Интернету при программировании на андроид

Коды:

public class myITClass { 
private Context ctx ; 
public myITClass(Context context){ 
    this.ctx = context; 
} 

public boolean CheckInternetConnection() { 
    ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE); 
    //NetworkInfo ni = cm.getActiveNetworkInfo(); 
    if (cm.getActiveNetworkInfo() == null) { 
     // There are no active networks. 
     return false; 
    } else { 

     return true; 
    } 
    } 
public boolean googlePingTest(){ 
    boolean res = false ; 
    try { 
     URL url = new URL("http://www.google.com/"); 
     HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
     urlc.setConnectTimeout(15000); 
     urlc.connect(); 
     if (urlc.getResponseCode() == 200) { res = true; } 
    } catch (MalformedURLException e1) { 
     res = false; 
    } catch (IOException e) { 
     res = false ; 
    }catch (Exception e){ 
     res = false ; 
    } 

    return res; 
} 
} 
+0

Я не думаю, что вы можете установить тайм-аут соединения _после_ вызова 'OpenConnection()'. Что-нибудь в logcat? –

+0

У меня есть то же самое, что и здесь, и его работоспособность. Для соединения было установлено только несколько свойств. http://stackoverflow.com/questions/27988103/android-check-if-there-is-wifi-but-no-internet – Rohit5k2

ответ

1

Вы можете отправить пинг в http://www.google.com/ через HttpURLConnection. Убедитесь, что вы делаете это в фоновом потоке. Создание сетевой задачи должно выполняться в фоновом режиме. Есть 3 варианта сделать это:

В это время, мы будем использовать AsyncTask. Так создать частный класс внутри Activity:

private boolean res = false; 
private class PingTask extends AsyncTask<String, String, String> { 

    @Override 
    protected String doInBackground(String... urlSite) { 
     HttpURLConnection urlc = null; 

     try { 
      URL url = new URL("http://www.google.com/"); 
      urlc = (HttpURLConnection) url.openConnection(); 
      urlc.setConnectTimeout(15000); 
      urlc.setRequestMethod("GET"); 
      urlc.connect(); 

     if (urlc.getResponseCode() == 200) { res = true; } 
     } catch (MalformedURLException e1) { 
     res = false; 
     } catch (IOException e) { 
     res = false ; 
     }catch (Exception e){ 
     res = false ; 
     }finally{ 
      if (urlc != null) { 
       try{ 
        // close the connection 
        urlc.disconnect(); 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
     return null; 
    } 
} 

Не забудьте добавить это поле в своем классе:

private boolean res = false; 

Создать метод, чтобы получить статус:

public boolean getStatus(){ 
    return status; 
} 

Как использовать?

Выполните PingTask первым, чтобы проверить статус:

PingTask ping = new PingTask(); 
ping.execute(); 

Получить статус:

// if the connection is available 
if(getStatus()==true){ 
    // do your thing here. 
} 
0

Второй способ требует сеть синхронно с основным потоком, и что блоки пользовательского интерфейса. Попробуйте использовать AsyncTask для него.

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