2

I've been using the following code on android 2.3 - 4.4.4 without any errors. But on running it on android L developer preview it gives me the following error

10-15 15:51:53.499: D/phone(30419): java.lang.NoSuchMethodException: setMobileDataEnabled [boolean]

    try {
        // log.i("Application running on Ginger bread+");
        final ConnectivityManager conman = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final Class<?> conmanClass = Class.forName(conman.getClass().getName());
        final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
        iConnectivityManagerField.setAccessible(true);
        final Object iConnectivityManager = iConnectivityManagerField.get(conman);
        final Class<?> iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
        final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
        setMobileDataEnabledMethod.setAccessible(true);
        setMobileDataEnabledMethod.invoke(iConnectivityManager, ON);
    } catch (Exception e) {
        Log.d(TELEPHONY_SERVICE, e.toString());
    }

Is there any work round for this problem.

Any help is appreciated Sahil

Sahil Lombar
  • 145
  • 1
  • 11

1 Answers1

5

setMobileDataEnabled has been removed in Android L.

Use this instead:

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Method methodSet = Class.forName(tm.getClass().getName()).getDeclaredMethod( "setDataEnabled", Boolean.TYPE);
methodSet.invoke(tm,true);

Make sure you have this permission on your manifest:

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

This permission is for System apps only

Pedro Oliveira
  • 20,442
  • 8
  • 55
  • 82