系統屬性獲取及設置中的設置值
data/data/com.android.providers.settings/databases/settings.db |
1.系統屬性獲取及設置
android.os.SystemProperties文件
android.os.Build文件
可以取得系統版本等信息。
類似adb shell : getprop看到的值
2.設置中的設置值
在android中,許多的系統屬性都在settings應用當中進行設置的,比如wifi、藍牙狀態,當前本機語言,屏幕亮度等等一些相關的系統屬性值。這些數據主要是存儲在數據庫中,對應的URI 為:content://settings/system和content://settings/secure,這兩個是主要的,目前也只是涉及到這兩個數據庫表的使用。
接下來,就了解下settings應用中是如何對系統屬性進行設置的。
當需要獲得當前wifi狀態的值,調用已封裝的方法如下:
Settings.Secure.getInt(getContentResolver() , Settings.Secure.WIFI_ON);
修改wifi狀態只需要調用對應的setInt方法就可以實現。
當需要獲得當前時間日期自動獲取,調用如下:
Settings.System.getInt(getContentResolver() , "auto_time");
修改也是調用對應的setInt方法。
注意:這里修改settings的系統屬性值需要有相關的權限。如修改wifi狀態需要有android.permission.WRITE_SETTINGS權限,權限問題只要參考sdk下的描述就可以。
其實在settings應用中所獲取或者修改屬性都是調用了framework中android.provider.settings的 Settings類對應的方法,也就是說真正有跟數據庫打交道的是在provider中,這里也體現了ContentProvider的用途。
就大體說下android.provider.settings.Settings這個類吧。Settings里面創建了包含System和 Secure在內的幾個內部類,每個內部類都對應了一張數據庫表,也就是繼承自BaseColumns類,System和Secure類分別對應着 system和secure數據庫表。
對於上面通過getInt獲得的字段,其實是在初始獲得數據庫數值的時候,首先是有getString方法將數據庫數據保留,然后在integer.parseInt將數據轉換成int類型。這就是settings讀取和保留數據的基本原理。
ref:
Android系統設置— android.provider.Settings
https://www.cnblogs.com/bluestorm/p/3665596.html