2012-03-25 23 views
13

Probé el siguiente código para comprobar si mi teléfono móvil está conectado a una red inalámbrica y funciona bien cuando quiero saber si mi teléfono móvil está conectado a la red, pero no proporciona información sobre el acceso a Internet ... algo como "Pinging" en cualquier sitio web. En realidad, seguí muchos enlaces pero todavía no recibo respuesta, así que estaré muy agradecido si alguien puede ayudar.Android - ¿Cómo comprobar el acceso a Internet, no solo la conectividad a wifi?

Gracias de antemano.

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Toast t = new Toast(getApplicationContext()); 

    if (isInternetOn()) { 
     // INTERNET IS AVAILABLE, DO STUFF.. 
     Toast.makeText(ConnectivityTestActivity.this,"Network is Available", Toast.LENGTH_LONG).show(); 

     } 
    else { 
     // NO INTERNET AVAILABLE, DO STUFF.. 
     Toast.makeText(ConnectivityTestActivity.this,"No Network Available", Toast.LENGTH_LONG).show(); 

     } 
} 

public final boolean isInternetOn() { 


    ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    // ARE WE CONNECTED TO THE NET 
    if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || 
    connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING || 
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING || 
    connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) { 
    // MESSAGE TO SCREEN FOR TESTING (IF REQ) 
    //Toast.makeText(this, connectionType + ” connected”, Toast.LENGTH_SHORT).show(); 
    return true; 
    } else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) { 

    return false; 
    } 
    return false; 
    }} 

EDIT:

siguen a continuación enlace que contiene una gran respuesta para el servidor Ping Google y obtener el resultado

https://stackoverflow.com/a/16458623/1239911

Respuesta

8

En realidad utilicé la misma función isInternetOn() pero eliminé la condición de conexión. Tenía que verificar el estado de la conexión si está conectada o no y si está intentando conectarse. Esto no funcionó para mí, así que eliminé la verificación del estado de conexión y luego funcionó.

Gracias por todas las respuestas.

public final boolean isInternetOn() 
{ 
    ConnectivityManager connec = (ConnectivityManager) 
    getSystemService(Context.CONNECTIVITY_SERVICE); 

    // ARE WE CONNECTED TO THE NET 
    if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED || 
     connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED) 
    { 
    // MESSAGE TO SCREEN FOR TESTING (IF REQ) 
    //Toast.makeText(this, connectionType + ” connected”, Toast.LENGTH_SHORT).show(); 
    return true; 
    } 
    else if (connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED 
    || connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) 
    { 
    return false; 
    } 

    return false; 
} 
+3

Sólo una nota ... que utiliza el código anterior de otra pregunta aquí en stackoverflow.com, podemos utilizar 'ConnectivityManager.Type_WIFI' o 'ConnectivityManager.Type_Mobile' en lugar de 0 y 1 en el getNetworkInfo() – Amt87

+1

¿Por qué siquiera necesitas la parte 'else if'? Si no estamos conectados eso significa que estamos desconectados. ¿Podrías decirme si hay algún uso de esta parte 'else if'? –

+1

Puede estar CONECTADO, DESCONECTADO, CONECTANDO, DESCONECTANDO, SUSPENDIDO y DESCONOCIDO. Puede verificar estos estados en developer.android.com o al hacer clic en ctrl + espacio después de (NetworkInfo.State) en su código. Deseo que esto pueda ser útil. – Amt87

6

ver la muestra:

public static boolean isWifiEnabled() { 
    if (!gWifiManager.isWifiEnabled()) { 

     if (mCanShowWifiToast) { 
      new Thread(mWifiToastControl).start(); 
      G.gHandler.post(mNoWifiRunnable); 
     } 

     return false; 
    } else { 
     int linkspeed = gWifiManager.getConnectionInfo().getLinkSpeed(); 
     if (linkspeed < 5) { 
      if (mCanShowWifiToast) { 
       new Thread(mWifiToastControl).start(); 
       G.gHandler.post(mNoWifiRunnable); 
      } 

      return false; 
     } 
    } 

    return true; 
} 
Cuestiones relacionadas