Вызов Android API для определения пользовательской настройки "Data Enabled"

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

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

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

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

Ответ 2

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