我使用此代码在我的应用程序中启用或禁用 Internet 3G 数据。我阅读了几个关于隐藏反射函数的问题,但它在数千部具有不同 android 版本的手机中运行良好(我的应用程序在 PlayStore 中,我没有遇到任何问题)。但我很担心,因为我发现一个人的手机无法做到这一点。让我首先展示我使用的代码:
try
{ final ConnectivityManager conman = (ConnectivityManager) MyContext.getSystemService(Context.CONNECTIVITY_SERVICE);
if(conman == null) return false;
Class conmanClass = Class.forName(conman.getClass().getName());
if(conmanClass == null) return false;
Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
if(iConnectivityManagerField == null) return false;
iConnectivityManagerField.setAccessible(true);
Object iConnectivityManager = iConnectivityManagerField.get(conman);
if(iConnectivityManager == null) return false;
Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
if(iConnectivityManagerClass == null) return false;
Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
if(setMobileDataEnabledMethod == null) return false;
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(iConnectivityManager, true/false); //Here is where you choose to enable or to disable
return true; //Everything went OK
}catch(Exception e)
{ return false;
}
错误在行:
Field iConnectivityManagerField = conmanClass.getDeclaredField("mService");
有了这个结果:
java.lang.NoSuchFieldException:mService
那部手机是使用 Jelly Bean 4.1.1 的三星 Galaxy SII 有什么想法吗?我害怕人们开始报告同样的问题。