关键内容简介
一、Settings
frameworks/base/core/java/android/provider/Settings.java
Settings.System.*
Settings.Secure.*
Settings.Global.*
例如,我们常用的Settings KEY,如下:
飞行模式:
Settings.Global.AIRPLANE_MODE_ON
定位:
Settings.SECURE.LOCATION_MODE
二、SettingsProvider
frameworks\base\packages\SettingsProvider
怎么快速验证?
一、通过adb快速验证
设置值:
adb shell settings put global airplane_mode_on 1
adb shell settings put secure location_mode 3
获取值:
adb shell settings get global airplane_mode_on
adb shell settings get secure location_mode
效果如下:
二、通过/data/system/users/0获取数据
注:
怎么通过代码来读取data/system/users/0中的文件?
其实,/data/system/users/0中的settings_global.xml、settings_secure.xml、settings_secure.xml文件,是由SettingsProvider创建,所以,要读这些文件,需要看SettingsProvider的权限有什么。例如,8.x 系统如下:
所以,我们的apk只要满足:
a.android:sharedUserId="android.uid.system"
b.系统签名
补充:
说明它是system用户,那么只要我们让我们的apk也属于system用户即可
三、一和二两者有什么关联?
adb shell settings中的global secure system和/data/system/users/0目录的对应关系
global<------->settings_global.xml
secure<------->settings_secure.xml
system<------->ssettings_secure.xml
Settings.java与SettingsProvider怎么关联?
1.Settings.java-->ContentResolver-->ContentProvider-->SettingsProvider
2.ContentResolver ------Uri-----SettingsProvider
说明:
1).ContentResolver好比内容分解器,能够分解具体是哪个内容提供者
2).ContentResolver的依据就是Uri
3).解析Uri:
content://user_dictionary
对比理解:
https表示的是网络技术中的传输协议
www.baidu.com是百度的域名
content://user_dictionary
content当做连接ContentProvider中的一种协议
user_dictionary可以比作具体ContentProvider的域名
例如:content://settings/system
settings找到SettingsProvider
system对应SettingsProvider中的system路径
参考文章
https://blog.csdn.net/c10wtiybq1ye3/article/details/79237671
网友评论