Search code examples
androidservicedata-connections

how to connect to a data connection programatically in mobile by android


i would like to get data from my host server by using a data connection in mobile. when my app is open it should connect to host server by data connection automatically. when in case of connection lost ... my service should automatically connect to the host sever by enabling the data connection from mobile not using with Bluetooth or WiFi. please help me from this situation

in my code i am using to check whether data connection is

    ConnectivityManager cm =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

    NetworkInfo netInfo = cm.getActiveNetworkInfo();

    if (netInfo != null && netInfo.isConnectedOrConnecting()) {


    //some task

        return true;                
    }
    else{

    Toast.makeText(this, "No internet connection", Toast.LENGTH_SHORT).show();

    }
    return false;

Solution

  • Use this class as it is and call it methods when ever you want to Enalbe /Disable DataConnection

    package com.AZone.eabc;
    
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.lang.reflect.Field;
    import android.net.ConnectivityManager;
    import android.util.Log;
    import android.content.Context;
    
    public class InternetControl {
    
    
    
        public static void EnableInternet(Context mycontext)
        {
            try {
                Log.i("Reached Enable", "I am here");
                setMobileDataEnabled(mycontext,true);
            } catch (NoSuchFieldException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        public static void DisableInternet(Context mycontext)
        {
            try {
                Log.i("Reached Disable", "I am here");
                setMobileDataEnabled(mycontext,false);
            } catch (NoSuchFieldException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        private static void setMobileDataEnabled(Context context , boolean enabled) throws NoSuchFieldException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
               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);
            }
    
    }
    

    Call methods of this class from AnyWhere like this

     InternetControl.EnableInternet(getBaseContext());
    

    ADD following permissions in You AndroidManifest file

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