Android L (5.x) Activar / desactivar "Mobile Data" mediante programación
Necesito activar / desactivar los datos móviles mediante programación. Debajo del código no funciona para 5.x. Podrías ayudarme. Gracias por adelantado.
private void setMobileDataEnabled(Context context, boolean enabled) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException { final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); final Class conmanClass = Class.forName(conman.getClass().getName()); final Field connectivityManagerField = conmanClass.getDeclaredField("mService"); connectivityManagerField.setAccessible(true); final Object connectivityManager = connectivityManagerField.get(conman); final Class connectivityManagerClass = Class.forName(connectivityManager.getClass().getName()); final Method setMobileDataEnabledMethod = connectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); setMobileDataEnabledMethod.setAccessible(true); setMobileDataEnabledMethod.invoke(connectivityManager, enabled); }
03-30 12: 42: 29.466: W / System.err (5966): java.lang.NoSuchMethodException: setMobileDataEnabled [boolean] 03-30 12: 42: 29.466: W / System.err (5966): en java.lang .Class.getMethod (Class.java:664) 03-30 12: 42: 29.466: W / System.err (5966): en java.lang.Class.getDeclaredMethod (Class.java:626)
- Android GridLayout API 21
- No se pudo encontrar un método onClick_Foo (Ver) - la primera vez que se ejecuta en Android Lollipop
- CardView va encima de FrameLayout, pero declaró primero
- Problema extraño al realizar la transición de ImageView en Android 5.0
- ¿Cómo acceder a los archivos de Android Lollipop DocumentFile a través de NDK?
Java.lang.NoSuchMethodException: setMobileDataEnabled [boolean] @ debajo de la línea.
Método final setMobileDataEnabledMethod = conectividadManagerClass.getDeclaredMethod ("setMobileDataEnabled", Boolean.TYPE);
- ¿Es posible tener una aplicación "Profile Owner" en Android Lollipop que no está presente
- Android: cambio de color de la barra de estado para el nivel de API inferior a 21
- Ripple dibujable en xml no funciona
- SetSupportProgressBarIndeterminateVisibility que genera java.lang.NullPointerException cuando se utiliza con Android 5.0 SDK (API 21)
- Seleccionar todas las causas abc_ic_menu_selectall_material.xml Recursos NotFoundException
- CalendarViewShown no está siendo reconocido en Android 5.0 Lollipop
- Cómo pasar valores de intención adicionales a un ACTION_OPEN_DOCUMENT_TREE Propósito
- Iconos de la barra de estado de Android
Parece que el método setMobileDataEnabled ya no existe en ConnectivityManager y esta funcionalidad se movió a TelephonyManager con dos métodos getDataEnabled y setDataEnabled.
public void setMobileDataState(boolean mobileDataEnabled) { try { TelephonyManager telephonyService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); Method setMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("setDataEnabled", boolean.class); if (null != setMobileDataEnabledMethod) { setMobileDataEnabledMethod.invoke(telephonyService, mobileDataEnabled); } } catch (Exception ex) { Log.e(TAG, "Error setting mobile data state", ex); } } public boolean getMobileDataState() { try { TelephonyManager telephonyService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); Method getMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("getDataEnabled"); if (null != getMobileDataEnabledMethod) { boolean mobileDataEnabled = (Boolean) getMobileDataEnabledMethod.invoke(telephonyService); return mobileDataEnabled; } } catch (Exception ex) { Log.e(TAG, "Error getting mobile data state", ex); } return false; }
Al ejecutar el código obtendrá una excepción de seguridad que indica que ni el usuario 10089 ni el proceso actual tiene android.permission.MODIFY_PHONE_STATE.
Un permiso MODIFY_PHONE_STATE se debe agregar Tengo esto de Respuesta Gracias Muzikant
En Android L 5.xx se elimina el método setMobileDataEnabled de la API oculta y ya no se puede utilizar. Puede verificar esto en el código fuente de lolipop de android en /frameworks/base/core/java/android/net/ConnectivityManager.java.
Si todavía insiste en realizarlo, puede utilizar el fragmento de código contestado por Kushal, pero getDataEnabled es un api del sistema, que las aplicaciones de usuario normal no pueden acceder. También hay un sistema más api disponible setDataEnabled bajo TelephonyManager. (/frameworks/base/telephony/java/android/telephony/TelephonyManager.java)
/** @hide */ @SystemApi public void setDataEnabled(boolean enable) { setDataEnabled(SubscriptionManager.getDefaultDataSubId(), enable); }
También necesita el permiso "android.permission.MODIFY_PHONE_STATE" que funcionará sólo en dispositivos con raíz.