我使用以下代码打开/关闭移动网络。
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
异常。
我的问题还有其他解决办法吗?我在清单文件中添加了所有必需的权限。
答案 0 :(得分: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是一种方法..试试这个我的朋友。我在之前的应用程序中发现它成功了。希望这可以帮到你。对不起,如果没有,因为我没经验丰富。:)