1,是否有默认值
在寻找一个开关的默认值时,首先要明白一点,该开关是否存在默认值,以及该开关状态是否有状态保存(一般状态存储在settings的db中)。
判断条件:
在reboot(重启)之后开关状态仍旧保存或者是在reset(恢复出厂设置)之后开关状态恢复到默认的,才能找到默认值。
在reboot之后开关状态仍旧保存的,表示状态存储在了db中。
在reset之后开关状态恢复默认的,表示状态有一个默认值。
比如像wiif开关,蓝牙开关,gps开关等,都有默认值,并且状态值都在db中保存。
至于像WiFi热点开关这种在reboot之后,状态没有保存,那么你就别白费力气来找他的默认值或者状态存储值了
2,修改默认值
大部分的开关状态都存储在了SettingProvider的db中,与状态值相关的有三个文件
/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java:该文件中对状态值进行存储
/frameworks/base/packages/SettingsProvider/res/values/defaults.xml:定义了开关状态的默认值
/frameworks/base/core/java/android/provider/Settings.java:定义了各开关状态默认值存储时对应的key
Settings的xml文件中:
源码:
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<bool name="def_bluetooth_on">false</bool> 默认开启蓝牙
有些厂商会覆盖这个值:
例如:
packages/services/Car/car_product/overlay/frameworks/base/packages/SettingsProvider 下面res
车机路径:
/data/system/users/0/settings_secure.xml,索引名分别为 bluetooth_name 和 bluetooth_address。
/data/system/users/0/settings_global.xml,索引值 bluetooth_on