一、Android系统 Settings数据库读写操作和数据监听变化原理分析
1、各个模块开关之类的存储
Android系统 Settings数据库读写操作和数据监听变化原理分析_android 监听数据库变化_不凡的洲的博客-优快云博客
存储的位置:/data/system/users/0/settings_global.xml
向WIFI_ON, 蓝牙开关都在这个文件里
frameworks/base/core/java/android/provider/Settings.java (代码)
adb shell进去系统可以看到:settings get global wifi_on 结果为0
SettingsProvider.java里有定义:SETTINGS_FILE_GLOBAL = "settings_global.xml";
2、wifi连接的热点记录以及WIFI热点的设置记录
参考:Android11 热点配置信息保存分析-办公频道-52电子
android 11wifi信息保存位置:
/data/misc/apexdata/com.android.wifi/WifiConfigStore.xml热点信息保存位置:
/data/misc/apexdata/com.android.wifi/WifiConfigStoreSoftAp.xml
WifiConfigStoreSoftAp.xml文件在刚刷机并且没有开启热点的时候,这个文件可能不存在,当开启热点后,会创建,并且在更改完热点配置后,这个也会同步更改
二、android开发笔记之设置(settings)DB数据库 (默认值)
android开发笔记之设置(settings)DB数据库_android settings.db_hfreeman2008的博客-优快云博客
1、更改恢复出厂设置的默认值
有一种配置是刚刷机 或者 恢复出厂设置的时候,会恢复默认配置
下面这个是wifi_on、blutooth_on 这些配置的默认配置文件
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<bool name="def_bluetooth_on">true</bool>
<bool name="def_wifi_on">true</bool>
<bool name="def_auto_time">false</bool>
碰到一个问题, 我可以把如果上面的auto_time的默认值更改,刷机后生效,但是上面的blutooth_on和wifi_on无论如何也不生效
经别人指导,知道有个叫overlay 机制的东西,就是会有其他的配置覆盖合并这个default.xml,
并找到位置在(8155平台):
packages/services/Car/car_product/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
2、加载默认配置的流程
packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
onCreate
loadSettings (Load inital settings values)
loadGlobalSettings (loadSystemSettings、loadSecureSettings)
loadBooleanSetting(stmt, Settings.Global.WIFI_ON,R.bool.def_wifi_on);
想打印所有的setting load,可以直接在loadSetting 函数里打印key和value
Log.i(TAG, "wqy loadSetting, key = " + key + " value = " + value);
3、添加新的默认配置项,比如data_on
源码位置:frameworks/base/core/java/android/provider/Settings.java
然后就可以获取这个数据库数据了
想在烧写和恢复出厂的时候,加载默认配置,需要在函数 loadGlobalSettings 里添加: