Android系统APP之SettingsProvider

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26366149/article/details/83866597

Android系统APP之SettingsProvider
SettingsProvider顾名思义是一个提供设置数据共享的Provider

    SettingsProvider只接受int、float、string等基本类型的数据;
    SettingsProvider由Android系统framework进行了封装,使用更加快捷方便
    SettingsProvider的数据由键值对组成

在Android 6.0版本时,SettingsProvider被重构,Android从性能、安全等方面考虑,把SettingsProvider中原本保存在settings.db中的数据,目前全部保存在XML文件中。
SettingsProvider的代码数量不多,主要包含如下的java文件:

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/GenerationRegistry.java

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsHelper.java

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java

frameworks/base/core/java/android/provider/Settings.java---->提供给第三方应用
SettingsProvider对数据进行了分类,分别是Global、System、Secure三种类型,它们的区别如下:

    Global:所有的偏好设置对系统的所有用户公开,第三方APP有读没有写的权限;
    System:包含各种各样的用户偏好系统设置;
    Secure:安全性的用户偏好系统设置,第三方APP有读没有写的权限。

 
SettingsProvider::onCreate()-->SettingsRegistry()::migrateAllLegacySettingsIfNeeded(第一次启动的时候会创建db 对象,进行数据的迁移,和兼容)
-->如果已经存在对应的Global 应用那么就return 掉--->根据当前用户数,创建对应用户下的db 文件和xml 文件 DatabaseHelper::onCreate()
-->创建对应的db 和system secure global 表--->创建玩表后,将默认的数据加载到对应表中,默认的数据存放在frameworks/base/packages/SettingsProvider/res/values/defaults.xml
文件中-->SettingsProvider::migrateLegacySettingsForUserLocked()-->根据userid 和类型创建对应的--->SettingsState-->migrateLegacySettingsLocked()
-->获取db 中的数据并存放到settings_system.xml等对应的文件中,将数据加载到SettingState 中 SettingsState::persistSyncLocked()将数据写入到对应的xml 文件中
,之后删除数据库
SettingsProvider.java                                                                                                                                             |-->name     
    ||                                                                                                                                                                             |-->value                 
 SettingsRegistery           |-----SettingsState(system.xml)--->ArrayMap<String,Settings>-->|-->Settings---|-->package        
    ||                                     |                                  |    
    SparArray<SettingsState>---|                                  |-->Settings
                     |.......

扫描二维码关注公众号,回复: 4044686 查看本文章


封装SettingsProvider接口        
                    
/data/code_liz/zc600kl/frameworks/base/core/java/android/provider/Settings.java
该类对Settings Provider 的功能进行了封装
在Settings 中存在多给类Global System Secure ,分别对应着settings_system.xml settings_secure.xml settings_global.xml
常见用法
获取数据
String globalValue = Settings.Global.getString(getContentResolver(), Settings.Global.AIRPLANE_MODE_ON);
写入数据
boolean isSuccess = Settings.System.putInt(getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);

查阅SettingsProvider的设置项不需要声明任何权限。

修改SettingsProvider需要权限:
android.permission.WRITE_SETTINGS

猜你喜欢

转载自blog.csdn.net/qq_26366149/article/details/83866597
今日推荐