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

尽管这是“重复的”,但当前答案已过时,并且在大多数情况下不再适用。我认为最好在这里提供更新的资源,以节省人们的时间,就像我刚才所做的那样,研究这个问题。


我一直在四处搜寻,以查看有关能够在应用程序中启用和禁用移动数据的最新信息(如果无法使用wifi)。


这是我能找到的最新内容之一:

您知道您不能再从小部件上禁用/启用棒棒糖上的数据吗?


有一个答案,我引用:


从来没有一个API。开发人员正在使用一种变通方法,即通过Reflections调用该方法。Google所做的一切就是关闭这个“漏洞利用”。




慕容3067478
浏览 535回答 3
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。

aluckdog

除非您拥有一部植根的手机,否则我认为您无法以编程方式启用和禁用数据,因为要这样做,我们必须包含仅授予系统或签名应用程序的MODIFY_PHONE_STATE权限。setMobileDataEnabled()该方法不再可以通过反射调用。从Android 2.1(API 7)到Android 4.4(API 19)可以通过反射调用,但是从Android 5.0及更高版本开始,即使使用植根电话,该setMobileDataEnabled()方法也不能调用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android