SettingsProvider数据库

424 阅读3分钟

简介

SettingsProvider由Android系统框架提供,包含全局、系统级别的用户偏好设置,系统中的setting应用和它关系紧密。SettingsProvider作为1个系统apk,随框架1起编译,在目录树中的位置:"frameworks\base\packages\SettingsProvider"。为方便使用,系统对SettingsProvider做了封装处理,封装的代码“frameworks\base\core\java\android\provider\Settings.java”,所以调用Settings中的方法就能轻易访问SettinsProvider。

1.数据分类和存储

存储系统默认属性值,通过监听属性值的变化执行相关的逻辑修改系统属性值,也可用于系统间跨进程通信

SettingsProvider对数据进行了分类,分别是Global、System、Secure,区别:

  • Global:全局的偏好设置,对系统中所有用户公开,第3方App无写权限;

手机路径:data/system/users/0/settings_global.xml

  • System:用户偏好系统设置;

手机路径:data/system/users/userid/settings_system.xml

  • Secure:安全相关的用户偏好系统设置,3方APP有读无写权限。

手机路径:data/system/users/userid/settings_secure.xml

注:在Android多用户环境下,Global分类数据是面向所有用户的,所以settings_global.xml只在0用户下存在

adb pull /data/system/users/0/settings_system.xml

adb pull /data/system/users/0/settings_global.xml

2.保存位置

Settings数据库的数据保存在手机/data/system/users/0目录下,settings_global.xml 、settings_system.xml、settings_secure.xml3个文件中分别是上面说的3种数据。

3.数据读写

/frameworks/base/core/java/android/provider/Settings.java

以 int 类型为例:

写入数据:

Settings.Global.putInt(ContentResolver cr, String name, int value);

读出数据:

Settings.Global.getInt(ContentResolver cr, String name, int def);

该类通过键值对的形式,将1些特定的值以全局的模式保存到Setting的数据库中,可通过它提供的get或put形式的方法对其中的数据进行读写操作

获取Setting里的设置信息:(Setting里面的1些设置也是通过数据库来保存的)

Settings.System.getInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0)//其中"getXXX"代表对应的类似方法,如getInt()、getBoolean、putString()等。

//通过变量名称获取值,若变量不存在,数据库中没有设置过初始值或该值类型不对,将抛出SettingNotFoundException异常

Settings.System.getXXX(ContentResolver cr, String name);

//通过变量名称获取值,若发生上面方法中导致异常的情况,将返给定的默认值

Settings.System.getXXX(ContentResolver cr, String name, XXX def);

//将指定名称的值写入数据库

Settings.System.putXXX(ContentResolver cr,String name, XXX Value);

setting数据库主要使用 SettingsProvider+DatabaseHelper 实现,类似的实现还有 通讯录、通话记录

文件位于:

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

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

setting 数据库的名称为 settings.db ,里面包含3张表 分别为:system、secure、global

Global:所有的偏好设置对系统的所有用户公开,第3方APP有读没有写的权限;

System:包含各种各样的用户偏好系统设置,第3方APP有读没有写的权限;

Secure:安全性的用户偏好系统设置,第3方APP有读没有写的权限。

其中settings_global.xml 、settings_secure.xml 、settings_system.xml 对应/frameworks/base/core/java/android/provider/Settings.java中的3个内部类:Global、Secure、System。

settings_global.xml 、settings_secure.xml 、settings_system.xml 位于 /data/system/users/0/ 下

这里需再关注1个文件 frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\SettingsProvider.java

在此文件中:定义了各数据库对应的xml文件

private static final String SETTINGS_FILE_GLOBAL = "settings_global.xml";

private static final String SETTINGS_FILE_SYSTEM = "settings_system.xml";

private static final String SETTINGS_FILE_SECURE = "settings_secure.xml";

private static final String SETTINGS_FILE_SSAID = "settings_ssaid.xml";

private static final String SETTINGS_FILE_CONFIG = "settings_config.xml";

原文链接:blog.csdn.net/xiaowang_lj…