Android API调用以确定用户设置“数据已启用”

时间:2011-07-06 05:04:21

标签: android android-wireless

我的程序会尝试检测移动网络是否在某个位置可用。

问题在于,当我没有数据连接时,并不意味着网络不存在......这取决于用户的偏好。 有NetworkInfo.isAvailable()可用的API,以及用户设置,例如用户是否正在漫游和漫游是否已启用或AirplaneMode是否已启用。

我的问题是我无法弄清楚用户是否在Settings / WirelessNetworks / MobileNetworks下禁用了数据服务。

听起来像一个微不足道的问题,但我还没有找到API调用。

2 个答案:

答案 0 :(得分:8)

在您的活动中:

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

答案 1 :(得分:0)

我知道上面的答案适用于OP。但在少数设备中,我发现即使数据被禁用,它也会返回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;
    }