前言
Settings 类是一个用于访问和管理设备设置的关键类,是 Android 系统中的一个关键类,它位于 framework/base/core/java/android/provider/
目录下,是 Android 框架层提供的一部分,用于访问和修改系统设置。这个类为开发者提供了一个接口,让他们可以查询和修改用户和系统级别的偏好设置。这些设置包括但不限于音量、屏幕亮度、飞行模式、网络配置等。
一、主要功能和特点
-
访问系统设置:
Settings
类通过 Android 的内容提供者(Content Provider)机制,允许应用程序访问和修改系统设置。这些设置存储在数据库(通常是settings.db
)中,由Settings.System
、Settings.Global
、Settings.Secure
等内部类进行管理。 -
内部类:
Settings.System
:用于访问和修改那些不依赖于特定用户账户的系统级设置。Settings.Global
:用于访问和修改全局设置,这些设置对所有用户都有效,但依赖于设备的当前用户。Settings.Secure
:用于访问和修改敏感的系统级设置,如密码、锁定屏幕信息等。
-
安全性:对于敏感信息的访问和修改,Android 系统提供了相应的权限控制。例如,修改
Settings.Secure
中的设置可能需要特定的系统权限。 -
设置名称和值:
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博客