为了账号安全,请及时绑定邮箱和手机立即绑定

有关以编程方式启用和禁用移动数据的最新更新

有关以编程方式启用和禁用移动数据的最新更新

慕容3067478 2019-10-18 10:30:15
尽管这是“重复的”,但当前答案已过时,并且在大多数情况下不再适用。我认为最好在这里提供更新的资源,以节省人们的时间,就像我刚才所做的那样,研究这个问题。我一直在四处搜寻,以查看有关能够在应用程序中启用和禁用移动数据的最新信息(如果无法使用wifi)。这是我能找到的最新内容之一:您知道您不能再从小部件上禁用/启用棒棒糖上的数据吗?有一个答案,我引用:从来没有一个API。开发人员正在使用一种变通方法,即通过Reflections调用该方法。Google所做的一切就是关闭这个“漏洞利用”。
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

我使用的变通办法仅适用于有根电话。


该setMobileDataEnabled方法已从其中的ConnectivityManager两个方法中删除,getDataEnabled并setDataEnabled已添加TelephonyManager到此功能中。


public void setMobileDataState(boolean mobileDataEnabled)

{

    try

    {

        TelephonyManager telephonyService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);


        Method setMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("setDataEnabled", boolean.class);


        if (null != setMobileDataEnabledMethod)

        {

            setMobileDataEnabledMethod.invoke(telephonyService, mobileDataEnabled);

        }

    }

    catch (Exception ex)

    {

        Log.e(TAG, "Error setting mobile data state", ex);

    }

}


public boolean getMobileDataState()

{

    try

    {

        TelephonyManager telephonyService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);


        Method getMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("getDataEnabled");


        if (null != getMobileDataEnabledMethod)

        {

            boolean mobileDataEnabled = (Boolean) getMobileDataEnabledMethod.invoke(telephonyService);


            return mobileDataEnabled;

        }

    }

    catch (Exception ex)

    {

        Log.e(TAG, "Error getting mobile data state", ex);

    }


    return false;

}

但是您需要将此权限(MODIFY_PHONE_STATE)添加到清单文件中,否则将收到SecurityException。


查看完整回答
反对 回复 2019-10-18
?
aluckdog

TA贡献1847条经验 获得超7个赞

除非您拥有一部植根的手机,否则我认为您无法以编程方式启用和禁用数据,因为要这样做,我们必须包含仅授予系统或签名应用程序的MODIFY_PHONE_STATE权限。

setMobileDataEnabled()该方法不再可以通过反射调用。从Android 2.1(API 7)到Android 4.4(API 19)可以通过反射调用,但是从Android 5.0及更高版本开始,即使使用植根电话,该setMobileDataEnabled()方法也不能调用。


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 534 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信