0

我正在使用以下代码打开/关闭移动网络。

        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);

我用 Android 2.3.X、4.0.X 和 4.1.X 测试了这段代码。它仅适用于 2.3.X 和 4.0.X ,但使用 4.1.X 失败

在使用 Android Jelly Bean 进行测试时java.lang.NoSuchFieldException: mService出现异常。

我的问题还有其他解决方案吗?我在清单文件中添加了所有必需的权限。

4

1 回答 1

2
   try
              {
    dataMtd = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class);
              } 
              catch (SecurityException e1) 
              {

                e1.printStackTrace();
              } 
              catch (NoSuchMethodException e1) 
              {

                e1.printStackTrace();
              }

                dataMtd.setAccessible(true); 
               try {

                dataMtd.invoke(conm,true);



              } 
}

datamtd 是一种方法。我的朋友试试这个。我发现它在我以前的应用程序中是成功的。希望这可以帮助你。对不起,如果没有,因为我没有太多经验。:)

于 2013-06-10T16:59:16.747 回答