前言
Settings 類是一個用于訪問和管理設備設置的關鍵類,而=作為系統開發人員,經常需要用這個類來做一些系統設備設置,而Settings里面存在著好幾個處理不同領域的設備設置類,那么如何才能結合自己的業務場景正確選擇使用這些設備設置類呢?這就需要我們先了解這些類的作用和使用場景,本篇文章我們將會結合系統源碼來梳理一下和Setting相關的知識。
一、Settings簡介
在 Android 開發中,Settings 類是用于訪問和管理設備設置的核心類之一。它位于 android.provider 包中,提供了靜態常量和方法來操作三種不同類型的設備設置,Settings類中存在著四個繼承自NameValueTable的內部靜態類。
base/core/java/android/provider/Settings.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讀寫:
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);