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