2012-01-13 2 views
1

Я использую следующий метод, чтобы проверить, имеет ли устройство доступ к Интернету.
В этом коде я пытаюсь пинговать/запрос www.google.comКак проверить, имеет ли устройство Android доступ к Интернету?

try 
{ 
    HttpGet request = new HttpGet(new URI(WEB_SIT_TO_PING)); 
    HttpParams httpParameters = new BasicHttpParams(); 

    HttpConnectionParams.setConnectionTimeout(httpParameters, 500); 
    HttpConnectionParams.setSoTimeout(httpParameters, 500); 

    HttpClient httpClient = new DefaultHttpClient(httpParameters); 
    HttpResponse response = httpClient.execute(request); 

    int status = response.getStatusLine().getStatusCode(); 
    if (status == HttpStatus.SC_OK) 
    { 
     result = true; 
    } 
} 
catch(Exception e) 
{ 
    e.printStackTrace(); 
    result = false; 
} 

выше код работает, но, когда моя деятельность получает запущен он отображает один пустой черный экран в течение 1-2 секунд, а затем отображает главный экран активность.

Я делаю эту проверку в действии onCreate.
Есть еще одна причина для этой проверки.

UPDATE:
Я не хочу проверять, подключена ли сеть или нет, я хочу проверить, есть ли у устройства доступ к Интернету. Возможно, у устройства есть сетевое подключение, но у этого сетевого подключения нет доступа к Интернету.

Спасибо.

ответ

2

Вы можете проверить, достаточно ли подключено устройство к сети, или если вы действительно хотите узнать, может ли устройство напрямую подключиться к Google без задержки, чтобы этот код выполнялся в задаче ASync.

Информация о задаче ASync: http://developer.android.com/reference/android/os/AsyncTask.html

AsyncTask позволит выполнить код на нити Seperate, чем в потоке пользовательского интерфейса. По этой причине он замораживается на 1 - 2 секунды.

EDIT Я не предоставил код для проверки беспроводной связи, поскольку другие уже предоставили другие альтернативы, но я подумал, что важно объяснить, почему вы экспериментируете с вами.

+0

Благодарим за ответ – User7723337

2

Вы можете использовать следующий код, чтобы определить, если устройство имеет доступ к Интернету:

boolean connected = false; 
     ConnectivityManager connectivitymanager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkinfo = connectivitymanager.getActiveNetworkInfo(); 
     connected = ((networkinfo != null) && (networkinfo.isAvailable()) && (networkinfo 
       .isConnected())); 
     Log.v("Message ", connected + ""); 
     if (connected == false) { 
      Toast.makeText(currentActivity.this, 
        "No Internet Connection detected on device", 
        Toast.LENGTH_LONG).show(); 
      finish(); 
     } else { 
      // 
     } 
+4

. Вы можете подключиться к Wi-Fi-сети без доступа к Интернету. так что это решение не самое лучшее –

2

В моем приложении я использую следующий фрагмент кода:

public boolean isOnline() { 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } 

Это проверяет текущее состояние сети телефона, чтобы узнать, подключено ли устройство к сетевому соединению и на основе этого возвращает логическую переменную.

Если вы хотите использовать этот кусок кода, хотя, вы должны добавить следующее разрешение на ваш файл манифеста:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

Это работало как шарм. Спасибо тебе за это. – praneetloke

0

Я предполагаю, что следующий фрагмент кода поможет проверить подключение к сети :

/* 
    *@return boolean return true if the application can access the internet 
    */ 
    public boolean isNetworkAvailable(Context context) { 
     ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) { 
       for (int i = 0; i < info.length; i++) { 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
        } 
       } 
      } 
     } 
     return false; 
     } 
1

Задержка на 1-2 секунды, с которой вы сталкиваетесь, связана с запросом http, который вы делаете в методе onCreate. Пользовательский интерфейс вашего экрана не появится, пока ваш метод onCreate не завершит выполнение. Если вы все еще хотите сделать HTTP-запрос в методе onCreate, вы можете сделать его в отдельном потоке. Может быть сделано асинхронное задание или новый поток, который вам подходит.

Всегда помните, что никогда не делайте время в задачах пользовательского интерфейса андроида. Здесь вы делали HTTP-запрос в потоке пользовательского интерфейса.На данный момент вы испытываете только задержку в 1-2 секунды. Если вы попытаетесь сделать то же самое, когда ваше устройство Android подключено к сети WIFI, но интернет очень медленный, то ваш HTTP-запрос может занять до 5 секунд, и если вы попробуете для выполнения любой операции пользовательского интерфейса в течение этих 5 секунд ваше приложение будет выдавать диалог «ЗАЯВЛЕНИЕ НЕ РЕАГИРОВАТЬ».

+0

Спасибо за объяснение, я переместил часть запроса HTTP в отдельный поток, и оттуда я отправляю одно сообщение в потоке пользовательского интерфейса для обновления пользовательского интерфейса в соответствии с состоянием сети. – User7723337