我的程序尝试检测某个位置的移动网络是否可用。
问题是,当我没有数据连接时,并不意味着网络不存在……这取决于用户的偏好。有一些 API 可用于NetworkInfo.isAvailable()
和用户设置,例如用户是否正在漫游和启用漫游或 AirplaneMode 是否打开。
我的问题是我无法确定用户是否在设置/无线网络/移动网络下禁用了数据服务。
听起来像一个微不足道的问题,但我还没有找到 API 调用。
我的程序尝试检测某个位置的移动网络是否可用。
问题是,当我没有数据连接时,并不意味着网络不存在……这取决于用户的偏好。有一些 API 可用于NetworkInfo.isAvailable()
和用户设置,例如用户是否正在漫游和启用漫游或 AirplaneMode 是否打开。
我的问题是我无法确定用户是否在设置/无线网络/移动网络下禁用了数据服务。
听起来像一个微不足道的问题,但我还没有找到 API 调用。
在您的活动中:
boolean mobileDataAllowed = Settings.Secure.getInt(getContentResolver(), "mobile_data", 1) == 1;
我知道上面的答案适用于 OP。但在少数设备中,即使数据被禁用,我发现它也会返回 true。所以我在 Android API 中找到了一种替代解决方案。
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;
}