使用 Froyo 2.2 上的代码启用/禁用移动数据 (GPRS)

Posted

技术标签:

【中文标题】使用 Froyo 2.2 上的代码启用/禁用移动数据 (GPRS)【英文标题】:Enable/Disable Mobile Data (GPRS) using code on Froyo 2.2 【发布时间】:2013-05-05 11:25:36 【问题描述】:

我正在尝试启用/禁用移动数据连接。 我已经使用了 rIHaN JiTHiN (Enable/Disable Mobile Data (GPRS) using code) 的代码,它在 android 4.0 上完美运行,但在我的 Galaxy S (Froyo 2.2) 上却不行...

有没有办法以编程方式启用/禁用数据连接?

如果有人知道为什么它在 Froyo 上不起作用,那将非常有帮助。根据 rIHaN JiTHiN 的说法,此代码适用于所有 Android 版本...

【问题讨论】:

【参考方案1】:

您可以使用以下代码检查它是启用还是禁用

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);

if (mMobile.isConnected()) 
    //if internet connected

如果它被禁用,您可以使用这个在您的froyo 设备上启用它

void turnData(boolean ON) throws Exception


if(bv == Build.VERSION_CODES.FROYO)


    Log.i("version:", "Found Froyo");
    try 
        Method dataConnSwitchmethod;
        Class telephonyManagerClass;
        Object ITelephonyStub;
        Class ITelephonyClass;
        TelephonyManager telephonyManager = (TelephonyManager) 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) 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);

也不要忘记将这些添加到manifest

android.permission.UPDATE_DEVICE_STATS
android.permission.CHANGE_NETWORK_STATE
android.permission.ACCESS_NETWORK_STATE
android.permission.MODIFY_PHONE_STATE
android.permission.READ_PHONE_STATE

【讨论】:

您好,感谢您的回答!这是完美的工作。实际上,我的 Manifest 权限有问题(android.permission.UPDATE_DEVICE_STATS & android.permission.MODIFY_PHONE_STATE)。我已经解决了这个问题:***.com/questions/13801984/….

以上是关于使用 Froyo 2.2 上的代码启用/禁用移动数据 (GPRS)的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式启用和禁用移动数据的最新更新[重复]

无法使用 NVAPI 启用/禁用 Mosaic

如何使用适用于 Gingerbread 和 Froyo 的 ICS UI 创建 Android 应用程序?

如何判断“移动网络数据”是启用还是禁用(即使通过 WiFi 连接)?

要启用或禁用按钮上的选择组件,请单击角度材质

如何启用移动但禁用 UITableView 中某些行的删除