2012-09-10 10 views
6

Quiero que mi aplicación compruebe si "Modo de red de datos" o "Datos móviles" está habilitado, incluso si no está activo actualmente. En otras palabras, necesito verificar si la aplicación puede incurrir en cargos por datos móviles, incluso si el teléfono está actualmente conectado a través de WiFi.Cómo verificar si Android "Datos móviles" está en

Al buscar en Google He encontrado el siguiente código que verifica si "Datos móviles" está "activo".

ConnectivityManager cm = 
     (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
boolean isMobile = activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE; 

El problema con este código es que si WiFi está activo, los datos móviles no se informan como activos aunque estén activados.

¿Se puede modificar el código para determinar si los datos móviles están "habilitados" y por lo tanto potencialmente activos, en lugar de como con este código si es el modo de conexión actualmente activo?

+0

ver esto: http://stackoverflow.com/questions/3644144/how-to-disable-mobile-data-on-android – Sharp80

+0

ver esto: http://stackoverflow.com/questions/3644144/how -to-disable-mobile-data-on-android – Sharp80

+0

¿Encontraste solución a esto? –

Respuesta

2

probar este

ConnectivityManager cm = (ConnectivityManager) 
      activity.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
     // if no network is available networkInfo will be null 
     // otherwise check if we are connected 
     if (networkInfo != null && networkInfo.isConnected()) { 
      return true; 
     } 
     return false; 
+0

Gracias por la sugerencia; sin embargo, este código devuelve verdadero si WiFi o una conexión de datos móvil está disponible. Estoy tratando de detectar específicamente si los datos móviles están habilitados (independientemente de si hay una conexión WiFi). – prepbgg

0

favor vistazo a este código: (código de una de mis aplicaciones publicadas en la tienda de juego)

private static boolean isAPNEnabled(Context paramContext) { 
    try { 
     NetworkInfo networkInfo = ((ConnectivityManager) paramContext.getSystemService("connectivity")).getActiveNetworkInfo(); 
     return networkInfo.isConnected(); 
    } catch (Exception e) { 
     return false; 
    } 
} 
+0

Gracias por la sugerencia; sin embargo, este código devuelve verdadero si WiFi o una conexión de datos móvil está disponible. Estoy tratando de detectar específicamente si los datos móviles están habilitados (independientemente de si hay una conexión WiFi). – prepbgg

2

probar esto, funciona en la mayoría de los casos.

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

     NetworkInfo activeNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
     boolean isConnected = activeNetwork != null && 
       activeNetwork.isConnected(); 

     if (!isConnected) 
     { 
      return false; 
     } 
+0

Nota: 'getNetworkInfo()' está en desuso desde API 23. – milosmns

0

no estoy seguro de que esto es funcionará en todos los dispositivos, pero funciona en algunas Traté:

private boolean isMobileDataEnabled(Context ctx) { 
    int mobileData = Settings.Secure.getInt(ctx.getContentResolver(), "mobile_data", 0); 
    return mobileData == 1; 
} 

Parece que devolver el resultado correcto, incluso si tengo una conexión Wi-Fi activa conexión.

Cuestiones relacionadas