tener puedo porque moviles mis marca los datos cualquier conecta como celular apagar activar activan android gprs invocationtargetexception

android - porque - no puedo activar mis datos moviles



Habilitar/deshabilitar la conexión de datos en Android mediante programación (2)

Quiero activar / desactivar la conexión de datos mediante programación. He usado el siguiente código:

void enableInternet(boolean yes) { ConnectivityManager iMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); Method iMthd = null; try { iMthd = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class); } catch (Exception e) { } iMthd.setAccessible(false); if(yes) { try { iMthd.invoke(iMgr, true); Toast.makeText(getApplicationContext(), "Data connection Enabled", Toast.LENGTH_SHORT).show(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block dataButton.setChecked(false); Toast.makeText(getApplicationContext(), "IllegalArgumentException", Toast.LENGTH_SHORT).show(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block Toast.makeText(getApplicationContext(), "IllegalAccessException", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block dataButton.setChecked(false); Toast.makeText(getApplicationContext(), "InvocationTargetException", Toast.LENGTH_SHORT).show(); } } else { try { iMthd.invoke(iMgr, true); Toast.makeText(getApplicationContext(), "Data connection Disabled", Toast.LENGTH_SHORT).show(); } catch (Exception e) { dataButton.setChecked(true); Toast.makeText(getApplicationContext(), "Error Disabling Data connection", Toast.LENGTH_SHORT).show(); } } }

Está funcionando sin ningún error en el emulador, pero obtengo "InvocationTargetException" cuando intento ejecutarlo en un dispositivo real. Estoy usando API nivel 8 para construir la aplicación.


@riHaN JiTiN su programa funciona bien para 2.3 y superior, pero necesita un pequeño cambio en la declaración ''else'':

else { try { iMthd.invoke(iMgr, true);

el ''verdadero'' debería cambiarse a ''falso''

iMthd.invoke(iMgr, false);


Este ejemplo de código debería funcionar para los teléfonos Android con Gingerbread y más alto:

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); }

No te olvides de agregar esta línea a tu archivo de manifiesto

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