Android 12系统源码_设备设置(一)Settings介绍

前言

Settings 类是一个用于访问和管理设备设置的关键类,而=作为系统开发人员,经常需要用这个类来做一些系统设备设置,而Settings里面存在着好几个处理不同领域的设备设置类,那么如何才能结合自己的业务场景正确选择使用这些设备设置类呢?这就需要我们先了解这些类的作用和使用场景,本篇文章我们将会结合系统源码来梳理一下和Setting相关的知识。

一、Settings简介

在 Android 开发中,Settings 类是用于访问和管理设备设置的核心类之一。它位于 android.provider 包中,提供了静态常量和方法来操作三种不同类型的设备设置,Settings类中存在着四个继承自NameValueTable的内部静态类。

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

java 复制代码
public final class Settings {

    public static class NameValueTable implements BaseColumns {

    }
    
    public static final class System extends NameValueTable {
    
    }
    
    public static final class Secure extends NameValueTable {
   
    }
    
    public static final class Global extends NameValueTable {

    }
    
    public static final class Config extends NameValueTable {
    
    }
}

Settings.System、Settings.Secure、Settings.Global、Settings.Config这四个内部类各自负责着不同类型的设备设置。

1、Settings.Global:

作用:用于管理设备的全局设置,这些设置通常是跨所有用户的,对所有应用程序可见且具有全局影响。

例子:Wi-Fi状态、自动时间、ADB调试状态、USB调试状态等。

2、Settings.System:

作用:用于管理设备的系统设置,包括控制设备的行为和外观。

例子:屏幕亮度、声音设置、时钟格式、振动设置等。

3、Settings.Secure:

作用:用于管理设备的安全设置和用户首选项,这些设置对用户的隐私和设备的安全性有直接影响。

例子:设备的锁屏方式、帐户和同步设置、位置提供程序设置等。

4、Settings.Config:

作用:这是一个较为特殊的类,用于读取和设置与设备配置相关的信息。

例子:设备的本地化语言、地区、键盘设置等。

权限:访问或修改这些配置通常需要相应的权限,例如 CHANGE_CONFIGURATION。

二、Settings设备设置属性的读写

1、Settings.Global

权限:访问或修改全局设置通常需要 WRITE_SETTINGS 权限;所有的偏好设置对系统的所有用户公开,第三方APP有读没有写的权限

对应xml路径:/data/system/users/0/settings_global.xml

  • adb读写:
cmd 复制代码
settings get global 系统属性key 或者 settings list global |grep 系统属性key
settings put global 系统属性key 系统属性值
settings delete global 系统属性key 
  • 代码读写:
java 复制代码
Settings.Global.getLong(context.getContentResolver(), key, defaltValue);
Settings.Global.putLong(mContext.getContentResolver(), key, value);

2、Settings.System

权限:访问或修改某些系统设置可能需要 WRITE_SETTINGS 权限;所有的偏好设置对系统的所有用户公开,第三方APP有读没有写的权限;

对应xml路径:/data/system/users/0/settings_system.xml

  • adb读写:
cmd 复制代码
settings get system 系统属性key 或者 settings list system |grep 系统属性key
settings put system 系统属性key 系统属性值
  • 代码读写:
java 复制代码
Settings.System.getLong(context.getContentResolver(), key, defaltValue);
Settings.System.putLong(mContext.getContentResolver(), key, value);

3、Settings.Secure

权限:访问或修改某些安全设置可能需要 WRITE_SECURE_SETTINGS 权限;安全性的用户偏好系统设置,第三方APP有读没有写的权限。

对应xml路径:/data/system/users/0/settings_secure.xml

  • adb读写:
cmd 复制代码
settings get secure 系统属性key 或者 settings list secure |grep 系统属性key
settings put secure 系统属性key 系统属性值
  • 代码读写:
java 复制代码
Settings.Secure.getLong(context.getContentResolver(), key, defaltValue);
Settings.Secure.putLong(mContext.getContentResolver(), key, value);
相关推荐
Bigger2 小时前
Flutter 开发实战:解决华为 HarmonyOS 任务列表不显示 App 名称的终极指南
android·flutter·华为
利剑 -~5 小时前
mysql面试题整理
android·数据库·mysql
梁同学与Android7 小时前
Android ---【经验篇】ArrayList vs CopyOnWriteArrayList 核心区别,怎么选择?
android·java·开发语言
沐怡旸8 小时前
【翻译】adb screenrecord 帮助文档
android
lienyin9 小时前
Android 简单的SFTP服务端+客户端通信传文件
android
fatiaozhang952714 小时前
中兴B860AV5.2-U_原机安卓4.4.2系统专用_晶晨S905L3SB处理器_线刷固件包
android·电视盒子·刷机固件·机顶盒刷机·中兴b860av5.2-u
儿歌八万首14 小时前
Android 自定义 View 实战:打造一个跟随滑动的丝滑指示器
android·kotlin
我有与与症14 小时前
Kuikly 实战:手把手撸一个跨平台 AI 聊天助手 (ChatDemo)
android
恋猫de小郭14 小时前
Flutter UI 设计库解耦重构进度,官方解答未来如何适配
android·前端·flutter
apihz15 小时前
全球IP归属地查询免费API详细指南
android·服务器·网络·网络协议·tcp/ip