title: How can I turn on and off mobile data using toggle button?
body: <p>Today I have done a task using toggle button. The mobile data needs to be turned on when I press the enable toggle button, and it should be turned off when I press the same button. I had done everything and when I press the enable button, the mobile data remains off. In fact I have added all the manifest permissions. The mobile data should turn on when I press the toggle button. Please help me friends,and also let me know where I committed mistake. I hereby enclosed my XML and Java coding. Please help me friends, Many thanks in advance.</p>
  
  <p>MainActivity.java:</p>
  
  <pre><code>import android.app.Activity;
  import android.content.Context;
  import android.net.ConnectivityManager;
  import android.view.View;
  import android.widget.TextView;
  import android.widget.Toast;
  import android.widget.ToggleButton;
  import android.os.Bundle;
  
  import java.lang.reflect.Field;
  import java.lang.reflect.InvocationTargetException;
  import java.lang.reflect.Method;
  
  public class MainActivity extends Activity{
      // constants
      static final String STATUS_ON = "Mobile Data: Enable";
      static final String STATUS_OFF = "Mobile Data: Disable";
  
      static final String TURN_ON = "Enable";
      static final String TURN_OFF = "Disable";
  
      // controls
      TextView TVMobileData;
      ToggleButton tBMobileData;
  
  
  
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          // load controls
          TVMobileData=(TextView)findViewById(R.id.TVMobileData);
          tBMobileData=(ToggleButton)findViewById(R.id.tBMobileData);
  
          // set click event for button
          tBMobileData.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  // check current state first
                  boolean state = isMobileDataEnable();
                  // toggle the state
                  if(state)toggleMobileDataConnection(false);
                  else toggleMobileDataConnection(true);
                  // update UI to new state
                  updateUI(!state);
              }
          });
      }
      public void updateUI(boolean state) {
          //set text according to state
          if(state) {
              TVMobileData.setText(STATUS_ON);
              tBMobileData.setText(TURN_OFF);
          } else {
              TVMobileData.setText(STATUS_OFF);
              tBMobileData.setText(TURN_ON);
          }
      }
      public boolean isMobileDataEnable() {
          boolean mobileDataEnabled = false; // Assume disabled
          ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
          try {
              Class cmClass = Class.forName(cm.getClass().getName());
              Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
              method.setAccessible(true); // Make the method callable
              // get the setting for "mobile data"
              mobileDataEnabled = (Boolean)method.invoke(cm);
          } catch (Exception e) {
              // Some problem accessible private API and do whatever error handling you want here
          }
          return mobileDataEnabled;
      }
      public boolean toggleMobileDataConnection(boolean ON)
      {
          try {
              //create instance of connectivity manager and get system connectivity service
              final ConnectivityManager conman = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
              //create instance of class and get name of connectivity manager system service class
              final Class conmanClass  = Class.forName(conman.getClass().getName());
              //create instance of field and get mService Declared field
              final Field iConnectivityManagerField= conmanClass.getDeclaredField("mService");
              //Attempt to set the value of the accessible flag to true
              iConnectivityManagerField.setAccessible(true);
              //create instance of object and get the value of field conman
              final Object iConnectivityManager = iConnectivityManagerField.get(conman);
              //create instance of class and get the name of iConnectivityManager field
              final Class iConnectivityManagerClass=  Class.forName(iConnectivityManager.getClass().getName());
              //create instance of method and get declared method and type
              final Method setMobileDataEnabledMethod= iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled",Boolean.TYPE);
              //Attempt to set the value of the accessible flag to true
              setMobileDataEnabledMethod.setAccessible(true);
              //dynamically invoke the iConnectivityManager object according to your need (true/false)
              setMobileDataEnabledMethod.invoke(iConnectivityManager, ON);
          } catch (Exception e){
          }
          return true;
      }
  }
  </code></pre>
  
  <p>activity_main.xml:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context="arun.com.togglebuttonexample.MainActivity"&gt;
  
      &lt;TextView
          android:id="@+id/TVMobileData"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_centerHorizontal="true"
          android:layout_marginTop="90dp"
          android:text="Mobile Data: Disable"
          android:textColor="#1BD6E0"
          android:textSize="40sp" /&gt;
  
      &lt;ToggleButton
          android:id="@+id/tBMobileData"
          android:layout_width="225dp"
          android:layout_height="225dp"
          android:layout_centerInParent="true"
          android:textSize="30sp"
          android:textOff="Enable"
          android:textOn="Disable" /&gt;
  &lt;/RelativeLayout&gt;
  </code></pre>
  
  <p>AndroidManifest.xml:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      package="arun.com.togglebuttonexample"&gt;
      &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&gt;
      &lt;uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/&gt;
          &lt;uses-permission android:name="android.permission.WRITE_SETTINGS"/&gt;
  
      &lt;application
          android:allowBackup="true"
          android:icon="@mipmap/ic_launcher"
          android:label="@string/app_name"
          android:roundIcon="@mipmap/ic_launcher_round"
          android:supportsRtl="true"
          android:theme="@style/AppTheme"&gt;
          &lt;activity android:name=".MainActivity"&gt;
              &lt;intent-filter&gt;
                  &lt;action android:name="android.intent.action.MAIN" /&gt;
  
                  &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
              &lt;/intent-filter&gt;
          &lt;/activity&gt;
      &lt;/application&gt;
  
  &lt;/manifest&gt;
  </code></pre>