6

I can use android.settings.WIRELESS_SETTINGS to turn on wireless and Bluetooth,but what should I use to turn on mobile internet?

Anirudh Ramanathan
  • 46,179
  • 22
  • 132
  • 191
Ryan
  • 5,456
  • 25
  • 71
  • 129

3 Answers3

7

From Lollipop there is restrictions in enabling mobile data programatically.

Use this code to intent to Mobile Data Usage where you can TurnOn/Off Mobile Data :

    Intent intent = new Intent();
    intent.setComponent(new ComponentName("com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity"));
    startActivity(intent);
Sriram C G
  • 931
  • 13
  • 24
0

Use this method to (turn off wifi(if on wifi)) and turn on mobile data connection

  public boolean isConnected() {
        ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
        boolean NisConnected = activeNetwork != null && activeNetwork.isConnected();
        if (NisConnected) {
            //  if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE || activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
            if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
                //  wifi.setWifiEnabled(true);//Turn on Wifi
                wifi.setWifiEnabled(false);//Turn off Wifi
            } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
                return true;
            else
                return false;
        }
        return false;
    }

after use up method , if you can see internet not connection then use bellow method to turn on Mobile data

 private void setMobileDataEnabled(Context context, boolean enabled) {
        try {
            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, enabled);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

Also Need Permission in Manifests

 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
Selim Raza
  • 497
  • 7
  • 16
0

Check if there is Internet or not.

public class NetworkUtil {

public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;


public static int getConnectivityStatus(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (null != activeNetwork) {
        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI)
            return TYPE_WIFI;

        if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE)
            return TYPE_MOBILE;
    }
    return TYPE_NOT_CONNECTED;
}

public static int getConnectivityStatusString(Context context) {
    int conn = NetworkUtil.getConnectivityStatus(context);
    int status = -1;
    if (conn == NetworkUtil.TYPE_WIFI) {
        status = 1;
    } else if (conn == NetworkUtil.TYPE_MOBILE) {
        status = 2;
    } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
        status = 0;
    }
    return status;
}`

Then if status == 0 ; then start this Intent. startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));

xbadal
  • 1,284
  • 2
  • 11
  • 24
  • No this is not answering the question. You are saying check the Internet and Intent to Settings.ACTION_WIRELESS_SETTINGS no he wanted to Intent to turn on Mobile Internet. – Sriram C G Dec 15 '16 at 07:48
  • yes! Exactly but it can not be done unless device is rooted. you can only open settings option. – xbadal Dec 15 '16 at 08:22
  • For more Info pls refer this [link][http://stackoverflow.com/questions/31120082/latest-update-on-enabling-and-disabling-mobile-data-programmatically] – xbadal Dec 15 '16 at 08:23