Android API调用来确定用户设置“数据已启用”

我的程序尝试检测移动networking是否在某个位置可用。

问题是,当我没有数据连接,并不意味着networking不存在…这取决于用户的喜好。 NetworkInfo.isAvailable()有可用的API,以及用户设置,如用户是否正在漫游和漫游已启用,或者AirplaneMode是否开启。

我的问题是,我无法弄清楚在Settings / WirelessNetworks / MobileNetworks下用户是否禁用了数据服务。

听起来像一个微不足道的问题,但我还没有find一个API调用。

Solutions Collecting From Web of "Android API调用来确定用户设置“数据已启用”"

在你的活动中:

 boolean mobileDataAllowed = Settings.Secure.getInt(getContentResolver(), "mobile_data", 1) == 1; 

来源: http : //code.google.com/p/quick-settings/source/browse/trunk/quick-settings/src/com/bwx/bequick/handlers/MobileDataSettingHandler2.java

我知道上面的答案为OP工作。 但是在很less的设备中,我发现即使数据被禁用,它也会返回true。 所以我find了一个在Android API中的备用解决scheme。

TelephonyManager的 getDataState()方法将非常有用。

蜂窝数据被禁用时,下面的函数返回false,否则返回true。

 private boolean checkMobileDataIsEnabled(Context context){ boolean mobileYN = false; TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); if (tm.getSimState() == TelephonyManager.SIM_STATE_READY) { TelephonyManager tel = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); // if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) // { // mobileYN = Settings.Global.getInt(context.getContentResolver(), "mobile_data", 0) == 1; // } // else{ // mobileYN = Settings.Secure.getInt(context.getContentResolver(), "mobile_data", 0) == 1; // } int dataState = tel.getDataState(); Log.v(TAG,"tel.getDataState() : "+ dataState); if(dataState != TelephonyManager.DATA_DISCONNECTED){ mobileYN = true; } } return mobileYN; }