在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似乎从一开始就存在,并且从未被删除。