2015-01-16 14 views
7

Sto scrivendo un programma in cui ho bisogno di controllare tre stati: 1. Se non ho WiFi, 2. se ho WiFi ma nessuna connessione internet (come se accendo il mio router, ma scollegare il cavo Ethernet), e 3. se ho WiFi e connessione internet. Poi cambierei il colore di un'icona nella mia app per rappresentare uno di questi stati (rosso, giallo o verde). Attualmente la condizione 2 non funziona, ogni volta che scollego il cavo sul mio router per il test, il colore dell'icona cambia da verde a rosso.Android Controllare se c'è WiFi ma non internet

public static void doPing(Context context) { 

     String googleUrl = "https://www.google.com"; 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 

     try { 
      HttpParams httpParameters = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpParameters, TIMEOUT_CONNECTION); 

      HttpConnectionParams.setSoTimeout(httpParameters, TIMEOUT_SOCKET); 

      HttpClient client = new DefaultHttpClient(httpParameters); 
      if (L) Log.i(TAG, "Calling: " + url); 
      HttpGet getGoogle = getHttpGet(googleUrl); 
      HttpResponse responseGoogle = client.execute(getGoogle); 

      if (responseGoogle != null){ 
       connectionIconView.setIcon(R.drawable.green_wifi); 
      } 
      else if (cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null){ 
       connectionIconView.setIcon(R.drawable.yellow_wifi); 
      } 
      else { 
       connectionIconView.setIcon(R.drawable.red_wifi); 
      } 

     } catch(Exception e) { 
      if (L) Log.e(TAG, "Error during HTTP call"); 
      e.printStackTrace(); 
     } 

risposta

14

Controllare se wifi è disponibile come questo

funzione 1

private boolean isWifiAvailable() { 
    ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    return wifi.isConnected(); 
} 

Dopo questo, verificare come questo se internet è disponibile

funzione 2

public static boolean isInternetAccessible(Context context) { 
if (isWifiAvailable()) { 
    try { 
     HttpURLConnection urlc = (HttpURLConnection) (new URL("http://www.google.com").openConnection()); 
     urlc.setRequestProperty("User-Agent", "Test"); 
     urlc.setRequestProperty("Connection", "close"); 
     urlc.setConnectTimeout(1500); 
     urlc.connect(); 
     return (urlc.getResponseCode() == 200); 
    } catch (IOException e) { 
     Log.e(LOG_TAG, "Couldn't check internet connection", e); 
    } 
} else { 
    Log.d(LOG_TAG, "Internet not available!"); 
} 
return false; 
} 

Condizioni

  1. If function 1 dichiarazioni false -> cambia colore a colore rosso
  2. Se function 1 ritorno vero e function 2 ritorna falsi -> cambia colore in GIALLO
  3. Se entrambe le funzioni restituiscono true -> cambia colore in VERDE
+0

Sto supponendo che tu intenda davvero "Se la funzione 1 restituisce true e la funzione 2 restituisce false -> cambia colore in GIALLO ". Grazie mille! Controllerò per vedere se funziona –

+0

Oh sì! Ho perso la parte gialla. : D – Rohit5k2

+0

durante la chiamata a google page, la pagina bianca viene visualizzata per millisecondi .Come risolverlo – Ajay

Problemi correlati