Android中的SettingsProvider

文章讲述了Android的SettingsProvider在提供设置数据共享中的角色,包括其在不同版本的改变、存储位置、查看修改方法,以及与SystemProperties的区别。通过ADB操作展示了如何查看和设置自动锁屏时间、全屏沉浸模式等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、SettingsProvider

SettingsProvider用来提供设置数据共享,主要用来存放一些Android系统的默认初始值。在Android 6.0版本时,SettingsProvider被重构,Android从性能、安全等方面考虑,把SettingsProvider中原本保存在settings.db中的数据,目前改为全部保存在/data/system/users/0/下的对应xml文件中。

用一句话概括SettingsProvider的作用,SettingsProvider包含全局性、系统级别的用户编好设置。在手机中有一个Settings应用,用户可以在Settings里面做很多设备的设置,这些用户偏好的设置很多就保存在SettingsProvider中。例如,设置锁屏时间等。

1.1 查看与修改

Settings分为三类,分别存储在不同的xml文件中:

settings_system.xml包含各种各样的用户偏好系统设置
settings_global.xml所有的偏好设置对系统的所有用户公开,第三方APP有读没有写的权限
settings_secure.xml安全性的用户偏好系统设置,第三方APP有读没有写的权限

使用ADB查看:

adb shell settings list system
adb shell settings list global
adb shell settings list secure

使用ADB获取与修改:

# get方法
adb shell settings get system font_scale
# set方法
adb shell settings put system font_scale 1.6

代码中修改:

Settings.System.putString(getActivity().getContentResolver(), "xxx", "default");

1.2 相关实例

#获取自动锁屏时间
adb shell settings list system | grep timeout                            
screen_off_timeout=300000
 
#设置自动锁屏时间
adb shell settings put system screen_off_timeout 2147483647
 
#全屏沉浸模式(包括状态栏和虚拟按键):
adb shell settings put global policy_control immersive.full=*
 
#沉浸状态栏:
adb shell settings put global policy_control immersive.status=*
 
#沉浸虚拟按键(隐藏后底部上划可以呼出):
adb shell settings put global policy_control immersive.navigation=*
 
#恢复正常模式(如果隐藏了状态栏或者虚拟按键但是又不想用了):
adb shell settings put global policy_control null

1.3 相关源码

状态值进行存储:frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
设置的成员定义:frameworks/base/core/java/android/provider/Settings.java
部分的默认值来源于:frameworks/base/packages/SettingsProvider/res/values/defaults.xml
settings代码位置在:frameworks/base/cmds/settings/settings

1.4 与SystemProperties的区别

数据保存方式不同:SystemProperties的数据保存属性文件中(/system/build.prop等),开机后会被加载到system properties store;SettingsProvider的数据保存在文件/data/system/users/0/settings_***.xml或数据库settings.db中;

作用范围不同:SystemProperties可以实现跨进程、跨层次调用,即底层的c/c++可以调用,java层也可以调用;SettingProvider只能能在java层(APP)使用;

公开程度不同:SettingProvider有部分功能上层第三方APP可以直接使用,SystemProperties是系统私有类,第三方app无法直接访问此类中的方法,但是我们可以通过反射间接访问。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A-sL1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值