检查数据连接是否“勾选”

时间:2013-06-10 09:30:43

标签: android 3g

我正在构建一个Android应用程序,它将使用Switch小部件来启用/禁用设备的数据连接。

我的问题实际上是数据漫游:如果用户已停用数据连接漫游,则NetworkInfo.isConnectedOrConnecting()TelephoneManager.getDataState()等API方法会说连接已关闭。

一般情况下这是正确的,但在我的上下文中,如果数据连接是从Android设置“勾选”,那么这是假的

所以,我需要一种能够检查数据连接是否被勾选的方法,而不是启用/活动/等。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

定义“mobile_data”行名,系统在本地存储数据连接复选框/开关的状态:

private static final String MOBILE_DATA = "mobile_data";

并检查该行的值是否为0。如果是0,则取消选中/禁用数据连接(取消勾选):

private boolean isMobileDataChecked() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        // The row has been moved to 'global' table in API level 17
        return Settings.Global.getInt(getContentResolver(), MOBILE_DATA, 0) != 0;
    }

    try {
        // It was in 'secure' table before
        int enabled = Settings.Secure.getInt(getContentResolver(), MOBILE_DATA);
        return enabled != 0;
    } catch (SettingNotFoundException e) {
        // It was in 'system' table originally, but I don't remember when that was the case.
        // So, probably, you won't need all these try/catches.
        // But, hey, it is better to be safe than sorry :)
        return Settings.System.getInt(getContentResolver(), MOBILE_DATA, 0) != 0;
    }
}