2010-05-27 12 views
8

que he estado tratando de retrive el tipo de red actual, pero sin éxitoObtener Tipo de red

cuando digo tipo de red: me refiero a conocer esta información: si el tipo es: NETWORK_TYPE_IDEN o NETWORK_TYPE_UMTS .. y etc ..

Traté de usar:

NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo(); 

o

NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo 
      (ConnectivityManager.TYPE_MOBILE); 

pero sin éxito ..

estoy haciendo esto coz quiero saber si la red actual es IDEN, o si la red actual está conectado a través de Wi-Fi ..

+0

¿Puedes seleccionar la respuesta del siguiente? Para que las personas lleguen a este hilo puedan conocer la respuesta aceptada. –

Respuesta

14

para obtener el tipo de red (creo que su hablar sobre wifi o móvil), puede utilizar este fragmento de código:

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

//mobile 
State mobile = conMan.getNetworkInfo(0).getState(); 

//wifi 
State wifi = conMan.getNetworkInfo(1).getState(); 

y luego usarlo como esa:

if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) { 
    //mobile 
} else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) { 
    //wifi 
} 

Para obtener el tipo de la red móvil que lo haría TelephonyManager#getNetworkType tratar o NetworkInfo#getSubtypeName

+0

Sí, esto es comprobar el clima i'am en wifi o no ... ¡y funciona! pero también hay una forma de verificar mi tipo de red (por ejemplo estoy en IDEN/GSM ...) ? – Moshik

+0

i editet my ansewr – RoflcoptrException

+0

No funcionó después de que lo intenté con Wifi ... todavía está en el primer conflicto ... parece que NetworkInfo.State.CONNECTED siempre devuelve verdadero ... ¿Alguna idea? – Moshik

15

Esto funciona para que compruebe el tipo de red ...

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

switch (networkType) 
{ 
case 7: 
    textV1.setText("1xRTT"); 
    break;  
case 4: 
    textV1.setText("CDMA"); 
    break;  
case 2: 
    textV1.setText("EDGE"); 
    break; 
case 14: 
    textV1.setText("eHRPD"); 
    break;  
case 5: 
    textV1.setText("EVDO rev. 0"); 
    break; 
case 6: 
    textV1.setText("EVDO rev. A"); 
    break; 
case 12: 
    textV1.setText("EVDO rev. B"); 
    break; 
case 1: 
    textV1.setText("GPRS"); 
    break;  
case 8: 
    textV1.setText("HSDPA"); 
    break;  
case 10: 
    textV1.setText("HSPA"); 
    break;   
case 15: 
    textV1.setText("HSPA+"); 
    break;   
case 9: 
    textV1.setText("HSUPA"); 
    break;   
case 11: 
    textV1.setText("iDen"); 
    break; 
case 13: 
    textV1.setText("LTE"); 
    break; 
case 3: 
    textV1.setText("UMTS"); 
    break;   
case 0: 
    textV1.setText("Unknown"); 
    break; 
} 
7

estoy usando esta función:

public String get_network() 
     {Activity act=(Activity)context; 
     String network_type="UNKNOWN";//maybe usb reverse tethering 
     NetworkInfo active_network=((ConnectivityManager)act.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 
     if (active_network!=null && active_network.isConnectedOrConnecting()) 
      {if (active_network.getType()==ConnectivityManager.TYPE_WIFI) 
       {network_type="WIFI"; 
       } 
      else if (active_network.getType()==ConnectivityManager.TYPE_MOBILE) 
       {network_type=((ConnectivityManager)act.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo().getSubtypeName(); 
       } 
      } 
     return network_type; 
     } 
1

Además, añadir a continuación el permiso requerido en su AndroidManifest. xml.

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

De lo contrario, que se enfrentará a accidente de aplicación al obtener ConnectivityManager manejar debido a excepción de seguridad.

1

En mi experiencia ... es mejor utilizar las guías de entrenamiento de Android para este tipo de esfuerzos. Es fácil obtener excepciones de puntero nulo cuando utiliza estas clases, y es especialmente malo cuando intenta detectar estas conexiones cuando la aplicación se abre por primera vez y luego la aplicación falla.

Usted puede utilizar el ConnectivityManager para comprobar que en realidad estás conectado a Internet, y si es así, qué tipo de conexión está en su lugar:

http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

Puede utilizar el ConnectivityManager para determinar la radio inalámbrica activa:

http://developer.android.com/training/efficient-downloads/connectivity_patterns.html

14

odio números mágicos:

/** 
* You need to add: 
* 
* <pre> 
*  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
* </pre> 
* 
* in your AndroidManifest.xml. 
*/ 
private String networkType() { 
    TelephonyManager teleMan = (TelephonyManager) 
      getSystemService(Context.TELEPHONY_SERVICE); 
    int networkType = teleMan.getNetworkType(); 
    switch (networkType) { 
     case TelephonyManager.NETWORK_TYPE_1xRTT: return "1xRTT"; 
     case TelephonyManager.NETWORK_TYPE_CDMA: return "CDMA"; 
     case TelephonyManager.NETWORK_TYPE_EDGE: return "EDGE"; 
     case TelephonyManager.NETWORK_TYPE_EHRPD: return "eHRPD"; 
     case TelephonyManager.NETWORK_TYPE_EVDO_0: return "EVDO rev. 0"; 
     case TelephonyManager.NETWORK_TYPE_EVDO_A: return "EVDO rev. A"; 
     case TelephonyManager.NETWORK_TYPE_EVDO_B: return "EVDO rev. B"; 
     case TelephonyManager.NETWORK_TYPE_GPRS: return "GPRS"; 
     case TelephonyManager.NETWORK_TYPE_HSDPA: return "HSDPA"; 
     case TelephonyManager.NETWORK_TYPE_HSPA: return "HSPA"; 
     case TelephonyManager.NETWORK_TYPE_HSPAP: return "HSPA+"; 
     case TelephonyManager.NETWORK_TYPE_HSUPA: return "HSUPA"; 
     case TelephonyManager.NETWORK_TYPE_IDEN: return "iDen"; 
     case TelephonyManager.NETWORK_TYPE_LTE: return "LTE"; 
     case TelephonyManager.NETWORK_TYPE_UMTS: return "UMTS"; 
     case TelephonyManager.NETWORK_TYPE_UNKNOWN: return "Unknown"; 
    } 
    throw new RuntimeException("New type of network"); 
} 
+0

RuntimeException es un bloqueo; Prefiero 'default: return" Nuevo tipo desconocido ";'. A partir de hoy, el código contiene la lista completa de las constantes NETWORK_TYPE_xxx. – 18446744073709551615

+0

@ 18446744073709551615: Bueno, sí, uno debería tener una excepción de verificación personalizada, probablemente; lo que quise decir con RE es que no debería suceder, la biblioteca debería ocuparse de eso con 'NETWORK_TYPE_UNKNOWN' (por el nombre). –

+0

** OFF-TOPIC ** es una pregunta filosófica interesante: ¿qué valor debe _getNetworkType() _ devolver cuando aparece un nuevo tipo de red (por ejemplo, NETWORK_TYPE_XYZ) y el teléfono se registra en dicha red? Si devuelve NETWORK_TYPE_XYZ, las aplicaciones antiguas pueden bloquearse (exactamente como lo hace el 'throw new RuntimeException()' anterior). Si revisan el manifiesto de la aplicación y devuelven NETWORK_TYPE_UNKNOWN para las aplicaciones creadas con las versiones anteriores de SDK, los desarrolladores probablemente se volverán locos tratando de descubrir por qué la aplicación anterior no ve el nuevo tipo de red. – 18446744073709551615

2

Mejor respuesta

public static String getNetworkType(Context context) { 

      TelephonyManager teleMan = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
      int networkType = teleMan.getNetworkType(); 
      switch (networkType) { 
       case TelephonyManager.NETWORK_TYPE_1xRTT: 
        return "1xRTT"; 
       case TelephonyManager.NETWORK_TYPE_CDMA: 
        return "CDMA"; 
       case TelephonyManager.NETWORK_TYPE_EDGE: 
        return "EDGE"; 
       case TelephonyManager.NETWORK_TYPE_EHRPD: 
        return "eHRPD"; 
       case TelephonyManager.NETWORK_TYPE_EVDO_0: 
        return "EVDO rev. 0"; 
       case TelephonyManager.NETWORK_TYPE_EVDO_A: 
        return "EVDO rev. A"; 
       case TelephonyManager.NETWORK_TYPE_EVDO_B: 
        return "EVDO rev. B"; 
       case TelephonyManager.NETWORK_TYPE_GPRS: 
        return "GPRS"; 
       case TelephonyManager.NETWORK_TYPE_HSDPA: 
        return "HSDPA"; 
       case TelephonyManager.NETWORK_TYPE_HSPA: 
        return "HSPA"; 
       case TelephonyManager.NETWORK_TYPE_HSPAP: 
        return "HSPA+"; 
       case TelephonyManager.NETWORK_TYPE_HSUPA: 
        return "HSUPA"; 
       case TelephonyManager.NETWORK_TYPE_IDEN: 
        return "iDen"; 
       case TelephonyManager.NETWORK_TYPE_LTE: 
        return "LTE"; 
       case TelephonyManager.NETWORK_TYPE_UMTS: 
        return "UMTS"; 
       case TelephonyManager.NETWORK_TYPE_UNKNOWN: 
        return "Unknown"; 
      } 
      return "New type of network"; 
    } 
2
/** Network type is unknown */ 
public static final int NETWORK_TYPE_UNKNOWN = 0; 
/** Current network is GPRS */ 
public static final int NETWORK_TYPE_GPRS = 1; 
/** Current network is EDGE */ 
public static final int NETWORK_TYPE_EDGE = 2; 
/** Current network is UMTS */ 
public static final int NETWORK_TYPE_UMTS = 3; 
/** Current network is CDMA: Either IS95A or IS95B*/ 
public static final int NETWORK_TYPE_CDMA = 4; 
/** Current network is EVDO revision 0*/ 
public static final int NETWORK_TYPE_EVDO_0 = 5; 
/** Current network is EVDO revision A*/ 
public static final int NETWORK_TYPE_EVDO_A = 6; 
/** Current network is 1xRTT*/ 
public static final int NETWORK_TYPE_1xRTT = 7; 
/** Current network is HSDPA */ 
public static final int NETWORK_TYPE_HSDPA = 8; 
/** Current network is HSUPA */ 
public static final int NETWORK_TYPE_HSUPA = 9; 
/** Current network is HSPA */ 
public static final int NETWORK_TYPE_HSPA = 10; 
/** Current network is iDen */ 
public static final int NETWORK_TYPE_IDEN = 11; 
/** Current network is EVDO revision B*/ 
public static final int NETWORK_TYPE_EVDO_B = 12; 
/** Current network is LTE */ 
public static final int NETWORK_TYPE_LTE = 13; 
/** Current network is eHRPD */ 
public static final int NETWORK_TYPE_EHRPD = 14; 
/** Current network is HSPA+ */ 
public static final int NETWORK_TYPE_HSPAP = 15; 
/** Current network is GSM {@hide} */ 
public static final int NETWORK_TYPE_GSM = 16; 
/** Current network is TD_SCDMA {@hide} */ 
public static final int NETWORK_TYPE_TD_SCDMA = 17; 
/** Current network is IWLAN {@hide} */ 
public static final int NETWORK_TYPE_IWLAN = 18; 

Lista de NetworkType proporcionada.

0

mejor uso sería:

NetworkInfo activeNetworkInfo = ((ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo(); 
    if (activeNetworkInfo == null) return false; 
    switch (activeNetworkInfo.getType()) { 
     case ConnectivityManager.TYPE_WIFI: 
      return true; 
    } 
//  public static final int TYPE_BLUETOOTH = 7; 
//  public static final int TYPE_DUMMY = 8; 
//  public static final int TYPE_ETHERNET = 9; 
//  public static final int TYPE_MOBILE = 0; 
//  public static final int TYPE_MOBILE_DUN = 4; 
//  /** @deprecated */ 
//  @Deprecated 
//  public static final int TYPE_MOBILE_HIPRI = 5; 
//  /** @deprecated */ 
//  @Deprecated 
//  public static final int TYPE_MOBILE_MMS = 2; 
//  /** @deprecated */ 
//  @Deprecated 
//  public static final int TYPE_MOBILE_SUPL = 3; 
//  public static final int TYPE_VPN = 17; 
//  public static final int TYPE_WIFI = 1; 
//  public static final int TYPE_WIMAX = 6; 

¿Qué otros tipos desea definir y mango depende de usted ...

Para aquellos que quieran un identificador de cadena, un mejor uso:

activeNetworkInfo.getTypeName() 
activeNetworkInfo.getSubtypeName() 
Cuestiones relacionadas