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);
相关推荐
厚德云21 分钟前
Anthropic的Claude安卓版能否赢得用户青睐?
android
三火哥1 小时前
Android 11 HAL层集成FFMPEG
android
工程师老罗1 小时前
聊聊不再兼容安卓的鸿蒙
android·华为·harmonyos
长亭外的少年1 小时前
如何在 Android 应用中通过 URL 获取文件扩展名
android
榴月子1 小时前
android binder如何实现异步
android·binder
超低空MC1 小时前
车载音视频App框架设计
android·java·架构·音视频·安卓
命运之手1 小时前
Android FlowLayout
android·flowlayout·auto-adaptive·wrap-line
超低空3 小时前
Android黑科技——破解系统隐藏API
android·java·架构
KdanMin4 小时前
高通Android 12 设置Global属性为null问题
android
小菜琳4 小时前
android的跨进程通讯方式
android