我正在使用以下代码打开/关闭移动网络。
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
出现异常。
我的问题还有其他解决方案吗?我在清单文件中添加了所有必需的权限。