我正在构建一个android应用程序,它将使用Switch小部件来启用/禁用设备的数据连接。
我的问题实际上是数据漫游:如果用户已经禁用了数据连接漫游,那么API方法如NetworkInfo.isConnectedOrConnecting()
或TelephoneManager.getDataState()
会说连接是关闭的。
一般情况下这是正确的,但在我的上下文中,这是假的如果数据连接从android设置中被"选中"。
所以,我需要一个方法,可以检查数据连接是否被选中,而不是启用/激活/等。
任何想法?
定义"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;
}
}