2012-09-04 4 views
1

Я разрабатываю приложение для Android, которое требует проверки подключения к Интернету. Когда WI-FI устройства выключен, он работает отлично, но когда я включаю Wi-Fi, но не подключиться к доступной сети, это сила closing.What может быть проблема? Пожалуйста, помогите булево isNetworkConnectionAvailable() {WI-FI подключен, но не подключен к сети

boolean connected = false; 

    ConnectivityManager cm =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

    if (cm != null) { 
     NetworkInfo ni = cm.getActiveNetworkInfo(); 

     if(ni != null){ 

       if(ni.isConnected()) 
       connected = true; 
       else 
        connected=false; 

      } 

    } 



    return connected; 

}

+0

Что такое исключение? – Abhi

+0

Я не мог увидеть исключение, так как невозможно проверить приложение на эмуляторе. –

ответ

5

Ваша проблема заключается в возврате верно, когда ваш Разрабатывают подключен в WIFI, но WIFI не подключается к Интернету. Вы можете решить эту проблему, выполнив команду ping программно.

IDEA:

1) Проверьте ARE подключения к Wi-Fi.

2) если вы подключаетесь к Wi-Fi-порту для проверки доступности сети.

Код: метод

public static boolean isOnline(Context con,String url){ 

    ConnectivityManager cm = (ConnectivityManager)con.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     if(u!=null){ 
      return ping(url); 
     }else{ 
      return true; 
     } 
    }else{ 
     return false; 
    } 
} 

Ping:

public static boolean ping(String u) { 
     try { 
      URL url = new URL(u); 
      HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
      urlc.setConnectTimeout(500); // Time is in Milliseconds to wait for ping response 
      urlc.connect(); 
      if (urlc.getResponseCode() == 200) { 
       Log.i(TAG, "* ping with ResponseCode: "+urlc.getResponseCode()); 
       return true; 
      }else{ 
       Log.i(TAG, "* Connection is too slow with ResponseCode: "+urlc.getResponseCode()); 
       return false; 
      } 
     }catch (MalformedURLException e1){ 
      Log.e(TAG,"Erroe in URL to ping"+e1); 
      return false; 
     }catch (IOException e){ 
      Log.e(TAG,"Error in ping"+e); 
      return false; 
     } 
    } 
+0

На самом деле для моего WI-FI-подключения требуются учетные данные. Если я надену свой WI-FI и не буду вводить учетные данные, я не смогу получить доступ к интернету. Это то, где он предоставляет исключение. Если я отключу Wi-Fi, код работает отлично, но когда я включаю WI-FI и не вводим учетные данные, так как я еще не подключен к Интернету, значит, он должен возвращать false, но вместо этого он возвращает true only. Спасибо за ваш ответ, но я просто хочу чтобы дать messege пользователю, что доступ к Интернету недоступен. –

+0

В качестве программиста вы не должны беспокоиться о том, как пользователи подключаются к сети, вплоть до пользователей. Программист должен сделать это, чтобы обработать нерабочую доступность программно выше кода, который будет обращаться к этому. Согласно вышеприведенному коду, если он возвращает false, вы должны сообщить пользователю о доступности сети. –

+0

Но если я запустил WI-FI, и у меня нет связи с интернет-вызовом, то URL-адрес даст мне исключение. Что я хочу сделать, это если устройство не подключено, он не должен вызывать URL-адрес вместо предоставления исключения. –

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