您的位置:首页 > 其它

key 不存在也是设置的一种存在状态

2009-12-07 16:59 302 查看
在 Android 程序中要存取系统设置时可以用

android.provider.Settings.System.getType(key);
android.provider.Settings.System.putType(key);


其中 Type 可以为 Int,Float,String 等,key 是 android.provider.Settings.System 中定义的常量。比如下面的代码可以取得系统的 Wi-Fi 连接是否启用的静态 IP 设置:

System.getInt(contentResolver, System.WIFI_USE_STATIC_IP) == 1;


但是 System.getType(contentResolver, key) 系列函数会抛出 SettingNotFoundException 异常。也就是说在查询不到此 key 对应的 value 时会抛出异常,我们应该把上述代码用 try ... catch ... 包起来。当然,System.getType(contentResolver, key, def) 在大多数情况下或许更方便。

总体来说,这个过程并没有什么复杂的地方,但是如果深究一下,为什么明确地写在文档里面的 key 在运行时会有取不到的可能性呢?其实这个问题我之前也考虑过,但没有多想,想当然地认为这样的 API 设计只是“为了看起来更严谨吧”(现在想想,多么幼稚的想法,哈哈)。直到今天我才明白这些设置如果保持初始的默认值一直没有改动过的话他们对应的 key 在系统数据库中就不存在!比如你的手机自从出厂(或上次重装系统)到现在压根没有设置过静态 IP 选项(“Use static IP" 默认是关闭的),那么 WIFI_USE_STATIC_IP 在系统设置数据库中就不存在。也就是说 key 不存在也是设置的一种存在状态,这句话说起来有点拗口,呵呵。

当然,这些 key 不存在还有一种可能性:某些设备没有实现某个功能。比如某款手机没有 Wi-Fi 芯片或压根不支持静态 IP(只是举个例子)也可以在查询 WIFI_USE_STATIC_IP 时抛出 SettingNotFoundException 异常(??)。我对这个不成熟的观点持严重的怀疑态度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐