Ответ 1
В вашей деятельности:
boolean mobileDataAllowed = Settings.Secure.getInt(getContentResolver(), "mobile_data", 1) == 1;
Моя программа пытается определить, доступна ли мобильная сеть в определенном месте.
Проблема в том, что когда у меня нет подключения к данным, это не значит, что сети там нет... это зависит от предпочтений пользователя.
Доступны API для NetworkInfo.isAvailable()
, а для пользовательских настроек, например, включен ли роуминг или роуминг, включен ли режим AirplaneMode.
Моя проблема в том, что я не могу понять, отключен ли у пользователей службы данных в настройках /WirelessNetworks/MobileNetworks.
Звучит как тривиальная проблема, но я не нашел вызов API.
В вашей деятельности:
boolean mobileDataAllowed = Settings.Secure.getInt(getContentResolver(), "mobile_data", 1) == 1;
Я знаю, что выше ответ работал на ОП. Но в нескольких устройствах я обнаружил, что он возвращает true, даже если данные отключены. Поэтому я нашел одно альтернативное решение, которое находится в Android API.
getDataState() метод TelephonyManager будет очень полезно.
Ниже функция возвращает false, когда данные сотовой связи отключены, в противном случае это верно.
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;
}