2014-09-26 9 views
18

Ho un requisito in cui voglio verificare se c'è una connessione Internet quando sono connesso alla rete.Come verificare la connettività Internet all'interno della rete in Android (utilizzando internet di qualche altro dispositivo tramite HOTSPOT)

Ad esempio, ho dispositivo A e B. dispositivo

dispositivo A è collegato con hotspot con quella del dispositivo B. In dispositivo A, ottengo come connessa con Wi-Fi e nel dispositivo B - one dispositivo collegato con hotspot.

Ora, se rimuovo Internet dal dispositivo B (non dall'hotspot di tethering), quindi nel dispositivo A, viene comunque visualizzato - connesso con Wi-Fi ma non c'è connessione a Internet.

Classi come ConnectivityManager aiutano a determinare se un dispositivo è connesso alla rete e non alla connettività Internet.

Desidero monitorare questo problema. C'è un modo per raggiungere questo obiettivo?

+0

+1, bella domanda, sto controllando la connettività Internet in una delle mie app, ma non ho gestito questo problema.Curioso delle risposte ora – nobalG

+0

Il dispositivo B è hotspot per il dispositivo A? e una volta chiuso l'hotspot del dispositivo B vuoi rilevarlo nel dispositivo A giusto? – KOTIOS

+1

Non rimuovere l'hotspot. Rimuovere Internet dal dispositivo B –

risposta

-2

Prova la funzione qui sotto per controllare la connessione a Internet:

public static boolean isInternetConnected(Context mContext) { 

     try { 
      ConnectivityManager connect = null; 
      connect = (ConnectivityManager) mContext 
        .getSystemService(Context.CONNECTIVITY_SERVICE); 

      if (connect != null) { 
       NetworkInfo resultMobile = connect 
         .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

       NetworkInfo resultWifi = connect 
         .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

       if ((resultMobile != null && resultMobile 
         .isConnectedOrConnecting()) 
         || (resultWifi != null && resultWifi 
           .isConnectedOrConnecting())) { 
        return true; 
       } else { 
        return false; 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return false; 
    } 

Aggiungere le seguenti autorizzazioni per il file manifest,

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

Si prega di leggere la domanda chiaramente utente sta chiedendo di soluzione con ConnectivityManager ma per conoscere la disponibilità di Internet non sulla disponibilità della rete. –

4

Può essere una soluzione ridicola, ma penso anche che potrebbe essere soluzione reale:

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnected()) { 
     try { 
      URL url = new URL("http://www.google.com"); 
      HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
      urlc.setConnectTimeout(3000); 
      urlc.connect(); 
      if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       return new Boolean(true); 
      } 
     } catch (MalformedURLException mue) { 
      // TODO Auto-generated catch block 
      mue.printStackTrace(); 
     } catch (IOException ie) { 
      // TODO Auto-generated catch block 
      ie.printStackTrace(); 
     } 
    } 
    return false; 
} 
+1

+1, non per niente ridicolo! In realtà una soluzione molto elegante. – RossC

+1

Quindi, se Google è offline significa che non ho Internet? –

+0

Penso di sì. È come provare a connettere il tuo server. Se non controlli per google. Se Google non si connette, significa che sei offline. –