Android进化

Android frameworks中的Settings.jav

2018-12-07  本文已影响0人  锄禾豆

关键内容简介

一、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

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

https://blog.csdn.net/myfriend0/article/details/58587065

https://blog.csdn.net/myfriend0/article/details/59107989/

上一篇下一篇

猜你喜欢

热点阅读