java - 启用/禁用数据问题

标签 java android 3g-network

我使用此代码在我的应用程序中启用或禁用 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 有任何想法吗?我担心人们开始报告同样的问题。

最佳答案

显然,三星(或者可能是 ROM mod 作者)重写了该类,不再有名为 mService 的数据成员。这完全在他们的权利之内。只要他们的更改不破坏 CTS 涵盖的任何内容,他们就可以对框架类的内部实现做他们想做的事。这就是为什么我和其他 Android 专家告诉开发人员不要像您正在使用的那样依赖脚本小子技巧。

如果“启用或禁用 Internet 3G 数据”对您的应用至关重要,并且您确定这会影响 Samsung Galaxy SII 上的库存 ROM,则需要阻止通过 Play 商店向此类设备分发。

如果“启用或禁用 Internet 3G 数据”对您的应用不是至关重要的,请添加一个更好的异常处理程序来表示“抱歉,此功能不可用”或类似的内容。

关于java - 启用/禁用数据问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15521707/

相关文章:

java - 对象参数不接受字符串

android - flash 文件没有显示在屏幕上?

Android自定义开关被剪裁/切断

Android studio 无法运行命令 : java -Xmx1024M -cp

android - 如何在 Android 中以编程方式打开 3G 移动数据?

java - Spring @RequestParam 和 req.getParameter ("xx") 的工作方式不同吗?

java - 在 RecyclerView 项目之间设置自定义分隔线

ubuntu - 连接多个USB 3G调制解调器的脚本

java - 在 Swing Java 中绘图