2009-11-15 23 views

Respuesta

0

También puede utilizar el TelephonyManager para averiguar cuál es el tipo de red móvil es:

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
int networkType = telephonyManager.getNetworkType(); 

tipos de red se indican los posibles en http://developer.android.com/reference/android/telephony/TelephonyManager.html#getNetworkType%28%29

+0

no funciona para Wi-Fi, ¿verdad? – shkschneider

+0

No, es por eso que dije "También puedes ..." en caso de que alguien necesite saber el tipo de red móvil que se está utilizando. Al menos algunas de las otras respuestas solo dicen si la conexión es WiFi o móvil. – Intrications

7

Puede usar esto para determinar si está conectado:

final ConnectivityManager connectManager = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE); // ctx stands for the Context 
final NetworkInfo mobile = connectManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
final NetworkInfo wifi = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI ); 

// Return true if connected, either in 3G or wi-fi 
return ((mobile != null && mobile.getState() == NetworkInfo.State.CONNECTED) || 
     (wifi != null && wifi.getState() == NetworkInfo.State.CONNECTED) ); 
} 

Este código requiere los permisos ACCESS_NETWORK_STATE y ACCESS_WIFI_STATE.

EDIT: public NetworkInfo getNetworkInfo (int networkType)has been deprecated in API 21. Para los niveles de API superiores al 20 se puede hacer de la siguiente manera:

final Network[] networks = connectManager.getAllNetworks(); 
boolean connected = false; 

for (int ctr = 0; !connected && ctr < networks.length; ++ctr) { 
    final NetworkInfo network = connectManager.getNetworkInfo(networks[ctr]); 
    final int netType = network.getType(); 

    connected = (network.getState() == NetworkInfo.State.CONNECTED) && 
      (
       netType == ConnectivityManager.TYPE_MOBILE  || 
       netType == ConnectivityManager.TYPE_WIFI  /*|| 
       netType == ConnectivityManager.TYPE_WIMAX  || 
       netType == ConnectivityManager.TYPE_ETHERNET */ ); 
} 

return connected; 

que limita este código para Wi-Fi y 3G de acuerdo con la pregunta del OP pero es fácil de extender a los tipos de conexión que acaba de agregar como Ethernet o Wi -Max.

+0

Gracias por su preocupación. Estoy tratando de usar este código así de esta manera, pero está dando fuerza para cerrar \t si (conectado) { \t startActivity (intent7); \t} – user667340

+0

Esto significa que en el código que está ejecutando cuando está conectado hay un error. Pero no en el código que está ejecutando cuando no está conectado. – Shlublu

+0

por favor guía cómo puedo poner en la declaración de caso que si está conectado a Internet debería abrir el otro intento, de lo contrario, solo se mostrará en pan tostado. – user667340

2

No sé por qué su aplicación falla, quizás esto ayude. Tal vez probar este método: (necesita el contexto de aplicación)

public static boolean isInternetConnectionActive(Context context) { 
    NetworkInfo networkInfo = ((ConnectivityManager) context 
    .getSystemService(Context.CONNECTIVITY_SERVICE)) 
    .getActiveNetworkInfo(); 

    if(networkInfo == null || !networkInfo.isConnected()) { 
    return false; 
    } 
    return true; 
} 

continuación, intenta llamar

if(isInternetConnectionActive(getApplicationContext)) { 
/* start Intent */ 
} 
else { 
    /* show Toast */ 
} 

esperanza esto ayuda

Cuestiones relacionadas