4

If I go to "Settings - Data Usage" and press the "Properties" I can activate "Restrict Background Data", using a Samsung Galaxy S2 (i9105P) with Android 4.1.2.

Is there any way I can do this programmatically, both on and off?

I only want to activate/deactivate it under certain conditions (determined by my app) so I don't have to manually remember to activate it.

PS: I searched the android.developer.com website, but with no success.

Cœur
  • 37,241
  • 25
  • 195
  • 267
Paul
  • 20,883
  • 7
  • 57
  • 74

2 Answers2

0

As I know for Android 4.x you cant do that. Only monkey runner plugin can help you.

But if you need for Android 2.x, this is method I used:

/**
 * Switch mobile data network access 
 * */

public void nmSwitchMobileNetworkDataAccess(boolean swtichCellOn){

    boolean disable;
    TelephonyManager telephonyManager = (TelephonyManager)m_context.getSystemService(Context.TELEPHONY_SERVICE);

    if(telephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED){
        disable = false;
    }else{
        disable = true;  
    }

    try{
        final ConnectivityManager conman = (ConnectivityManager)m_context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
        final Method setMobileDataEnabledMethod = conman.getClass().getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);

        if(disable == true && swtichCellOn == true){
            setMobileDataEnabledMethod.invoke(conman, true);//turn cell on

            DispatcherAndroid.androidObserverItf.androidObserver_OnProgress("Turn cell on, done",
                    EMethodResponse.ON_NM_REQ.FromEnumToString()  );
        }
        else if(disable == false && swtichCellOn == false){
            setMobileDataEnabledMethod.invoke(conman, false);//turn cell off

            DispatcherAndroid.androidObserverItf.androidObserver_OnProgress("Turn cell off, done",
                    EMethodResponse.ON_NM_REQ.FromEnumToString()  );
        }   
        else if((disable == false && swtichCellOn == true) || (disable == true && swtichCellOn == false)){
            DispatcherAndroid.androidObserverItf.androidObserver_OnProgress("No changes",
                    EMethodResponse.ON_NM_REQ.FromEnumToString()  );
        }

    }
    catch(Exception e){
        e.printStackTrace();
    }
}
Valery Viktorovsky
  • 6,487
  • 3
  • 39
  • 47
Maxim Shoustin
  • 77,483
  • 27
  • 203
  • 225
0

You can run this command in the command line svc data disable or svc data enable You obviously need root to do that, like this:

Runtime.getRuntime().exec("echo svc data disable | su");

This should bring up root dialog if your device is rooted.

pelya
  • 4,326
  • 2
  • 24
  • 23