Вызов Android API для определения настроек пользователя "Данные включены"

Моя программа пытается определить, доступна ли мобильная сеть в определенном месте.

Проблема в том, что когда у меня нет подключения к данным, это не значит, что сети там нет... это зависит от предпочтений пользователя. Есть API, доступные для NetworkInfo.isAvailable()и для пользовательских настроек, например, включен ли пользователь в роуминге и включен ли роуминг или включен ли режим AirplaneMode.

Моя проблема в том, что я не могу понять, отключены ли у пользователя службы данных в Настройках / Беспроводные сети / Мобильные сети.

Звучит как тривиальная проблема, но я не нашел вызова API.

2 ответа

Решение

В вашей деятельности:

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

Источник: https://github.com/yanchenko/quick-settings/blob/master/src/com/bwx/bequick/handlers/MobileDataSettingHandler2.java#L123

Я знаю, что выше ответ работал для ОП. Но в нескольких устройствах я обнаружил, что он возвращает 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;
    }
Другие вопросы по тегам