Android 12系统源码_Settings类介绍

前言

        Settings 类是一个用于访问和管理设备设置的关键类,是 Android 系统中的一个关键类,它位于 framework/base/core/java/android/provider/ 目录下,是 Android 框架层提供的一部分,用于访问和修改系统设置。这个类为开发者提供了一个接口,让他们可以查询和修改用户和系统级别的偏好设置。这些设置包括但不限于音量、屏幕亮度、飞行模式、网络配置等。

         

一、主要功能和特点

  1. 访问系统设置Settings 类通过 Android 的内容提供者(Content Provider)机制,允许应用程序访问和修改系统设置。这些设置存储在数据库(通常是 settings.db)中,由 Settings.SystemSettings.GlobalSettings.Secure 等内部类进行管理。

  2. 内部类

    • Settings.System:用于访问和修改那些不依赖于特定用户账户的系统级设置。
    • Settings.Global:用于访问和修改全局设置,这些设置对所有用户都有效,但依赖于设备的当前用户。
    • Settings.Secure:用于访问和修改敏感的系统级设置,如密码、锁定屏幕信息等。
  3. 安全性:对于敏感信息的访问和修改,Android 系统提供了相应的权限控制。例如,修改 Settings.Secure 中的设置可能需要特定的系统权限。

  4. 设置名称和值Settings 类中的设置通常通过字符串名称来引用,并且与特定的值(如整型、字符串等)相关联。

案例

import android.content.ContentResolver;  
import android.content.Context;  
import android.provider.Settings;  
  
public class SettingsExample {  
  
    private Context context;  
  
    public SettingsExample(Context context) {  
        this.context = context;  
    }  
  
    // 查询屏幕亮度  
    public int getScreenBrightness() {  
        ContentResolver resolver = context.getContentResolver();  
        try {  
            return Settings.System.getInt(resolver, Settings.System.SCREEN_BRIGHTNESS);  
        } catch (Settings.SettingNotFoundException e) {  
            // 如果没有找到设置,则返回默认值  
            return 127; // 示例值  
        }  
    }  
  
    // 修改屏幕亮度(注意:需要WRITE_SETTINGS权限)  
    public void setScreenBrightness(int brightness) {  
        ContentResolver resolver = context.getContentResolver();  
        Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, brightness);  
        // 发送亮度改变的广播,通知系统更新UI  
        // 注意:在实际应用中,可能需要更多的权限或处理来确保这一操作的正确性  
    }  
}

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

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 {
    
    }
}

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读写:
settings get global 系统属性key 或者 settings list global |grep 系统属性key
settings put global 系统属性key 系统属性值
settings delete global 系统属性key 

代码读写:

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读写:
settings get system 系统属性key 或者 settings list system |grep 系统属性key
settings put system 系统属性key 系统属性值

代码读写:

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读写:
settings get secure 系统属性key 或者 settings list secure |grep 系统属性key
settings put secure 系统属性key 系统属性值

代码读写:

Settings.Secure.getLong(context.getContentResolver(), key, defaltValue);
Settings.Secure.putLong(mContext.getContentResolver(), key, value);





​
参考

Android 12系统源码_SystemUI(一)SystemUI的启动流程_android systemui-CSDN博客

​


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值