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

虽然这是一个“重复”,但是现在的答案已经过时了,而且大部分都不再适用。 如果可能的话,我认为在这里提供一个更新的资源是很好的,以节省时间,正如我刚才所做的那样,研究这个问题。

我一直在googlesearch,看看能够启用和禁用应用程序内的移动数据(如果无法使用WiFi)的最新信息。

这是我能find的最新的事情之一:
你知道你不能再从一个部件禁用/启用棒棒糖数据?

有一个答案,我引用:

从来没有一个API。 开发人员通过Reflections调用方法来使用解决方法。 谷歌所做的一切都是closures这个“利用”。

也有这个讨论:

replace为setMobileDataEnabled()api
哪个是2015年2月

这里有这些问题:

如何在Android上禁用移动数据

这是在2010年提出的,最新的答案在2014年12月更新了一个class轮。

以编程方式在android中启用/禁用数据连接

而这个,2012年被接受的答案。

这个问题最新的是什么?

它还能完成吗?

Solutions Collecting From Web of "以编程方式启用和禁用移动数据的最新更新"

我使用的是一种只适用于固定电话的解决方法。

ConnectivityManager中删除了setMobileDataEnabled方法,但为了此function,已将两个getDataEnabledsetDataEnabled方法添加到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 )添加到Manifest文件中,否则您将得到SecurityException。

它不会在无根电话上工作,因为他们添加了MODIFY_PHONE_STATE权限检查。 此权限仅适用于系统或签名应用程序。

从PhoneInterfaceManager中检查下面的代码:

 1853 @Override 1854 public void setDataEnabled(boolean enable) { 1855 enforceModifyPermission(); 1856 mPhone.setDataEnabled(enable); 1857 } 1308 private void enforceModifyPermission() { 1309 mApp.enforceCallingOrSelfPermission(android.Manifest.permission.MODIFY_PHONE_STATE, null); 1310 } 

除非你有一个根深蒂固的手机,我不认为你可以以编程方式启用和禁用数据,因为为了做到这一点,我们必须包括MODIFY_PHONE_STATE权限,这个权限只能给系统或签名应用程序。

setMobileDataEnabled()方法不再可以通过reflection来调用。 从Android 2.1(API 7)到Android 4.4(API 19)可以通过reflection进行调用,但是对于Android 5.0和更高版本,即使使用根目录的手机, setMobileDataEnabled()方法也不可调用。