Disable/Enable mobile data on Android L with root access

后端 未结 4 1969
-上瘾入骨i
-上瘾入骨i 2020-12-28 22:02

I am writing a little app that only I will use and I want to pragmatically enable / disable my mobile data on a rooted android 4.5 device (I am running a custom Android L fo

4条回答
  •  难免孤独
    2020-12-28 22:12

    void turnData(boolean ON) throws Exception
    {
    
        int currentapiVersion = android.os.Build.VERSION.SDK_INT;
        if(currentapiVersion == Build.VERSION_CODES.FROYO)
        {
    
            Log.i("version:", "Found Froyo");
            try{ 
                Method dataConnSwitchmethod;
                Class telephonyManagerClass;
                Object ITelephonyStub;
                Class ITelephonyClass;
                TelephonyManager telephonyManager = (TelephonyManager) cx.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
    
                telephonyManagerClass = Class.forName(telephonyManager.getClass().getName());
            Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony");
            getITelephonyMethod.setAccessible(true);
            ITelephonyStub = getITelephonyMethod.invoke(telephonyManager);
            ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName());
    
            if (ON) {
                 dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("enableDataConnectivity"); 
    
            } else {
                dataConnSwitchmethod = ITelephonyClass.getDeclaredMethod("disableDataConnectivity");
            }
            dataConnSwitchmethod.setAccessible(true);
            dataConnSwitchmethod.invoke(ITelephonyStub);
            }catch(Exception e){
                  Log.e("Error:",e.toString());
            }
    
        }
         else
        {
           Log.i("version:", "Found Gingerbread+");
           final ConnectivityManager conman = (ConnectivityManager) cx.getApplicationContext().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);
        }
    }
    

提交回复
热议问题