在android jelly bean中以编程方式打开/关闭移动网络连接

在android jelly bean中以编程方式打开/关闭移动网络连接,android,android-4.2-jelly-bean,android-networking,Android,Android 4.2 Jelly Bean,Android Networking,我正在使用以下代码打开/关闭移动网络 final ConnectivityManager conman = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); final Class conmanClass = Class.forName(conman.getClass().getName()); final Fi

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

        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
异常

我的问题还有别的解决办法吗?我在清单文件中添加了所有必需的权限

   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是一种方法。。试试这个,我的朋友。我发现它在我以前的应用程序中成功了。希望这能对你有所帮助。如果没有,我很抱歉,因为我没有太多的经验。

不知道您是否需要其他网络,或者您是否想在非连接模式下工作,但您是否考虑过飞行模式?您的手机不需要为此植根?为什么您不能使用dataMtd.setAccessible(true);在试捕区外?如果getDeclaredMethod引发异常,则dataMtd将为null,您可能已经尝试过了,并且该应用程序现在在play store my friend中可用。这是其中的一段代码。我不是说它不工作,我只是说它不符合逻辑/一致。您捕获异常,因为可以有一个,因此您应该考虑完成的可能性。此外,虽然我同意您的答案应该工作(因为当我在管理器中存在该方法时,我看不到需要访问服务)时,我已经查看了这个连接管理器的源代码,而且字段mService似乎从一开始就存在,并且从未被删除。