Android system — settings数据库

0. 前言

  Android系统设置数据库用于保存系统的一些默认设置值,另外在开发的时候,有时候我们一些设置属性要保存到本地,防止软件卸载后配置属性消失,也可以将这些值保存到系统数据库中。

1. 关键类及实现

数据库的位置在/data/data/com.android.providers.settings/

保存的是键值对key-value,数据是保存到系统文件中的

数据库中的默认数据在frameworks/base/packages/SettingsProvider/res/values/defaults.xml中定义
一般有四种类型(bool, integer, string, fraction)

<bool name="def_sound_effects_enabled">true</bool>
<integer name="def_max_dhcp_retries">9</integer>
<string name="def_location_providers_allowed" translatable="false">gps</string>
<fraction name="def_window_animation_scale">100%</fraction>

通过frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java对数据库结构及初始值进行初始化

frameworks\base\core\java\android\provider\settings.java----------定义变量

2. 实例分析

2.1 无默认值 SET_INSTALL_LOCATION

  我们以SET_INSTALL_LOCATION为例,让我们知道这个变量是如何定义使用的:

(1) frameworks\base\core\java\android\provider\settings.java—定义变量:

/**
* Let user pick default install location.
*
* @hide
*/
public static final String SET_INSTALL_LOCATION = "set_install_location";
 
 
MOVED_TO_GLOBAL.add(Settings.Global.SET_INSTALL_LOCATION);

(2) frameworks\base\packages\settingsprovider\src\com\android\providers\settings\ databaseHelper.java------给变量赋值

loadGlobalSettings(SQLiteDatabase db)方法中:

loadSetting(stmt, Settings.Global.SET_INSTALL_LOCATION, 0);

(3)如何使用:

import android.provider.Settings;
 
boolean userSetInstLocation = (Settings.Global.getInt(getContentResolver(),
Settings.Global.SET_INSTALL_LOCATION, 0) != 0);

2.2 有默认值 CAR_DOCK_SOUND

我们再以CAR_DOCK_SOUND为例,让我们看看这个变量是如何定义使用的:

(1) frameworks\base\core\java\android\provider\settings.java—定义变量:

public static final String CAR_DOCK_SOUND = "car_dock_sound";
MOVED_TO_GLOBAL.add(Settings.Global.CAR_DOCK_SOUND);

(2) frameworks\base\packages\settingsprovider\src\com\android\providers\settings\ databaseHelper.java------给变量赋值

loadStringSetting(stmt, Settings.Global.CAR_DOCK_SOUND,R.string.def_car_dock_sound);

(3) frameworks\base\packages\settingsprovider\res\values\defaults.xml-----定义初始值

<string name="def_car_dock_sound" translatable="false">/system/media/audio/ui/Dock.ogg</string>

(4)如何使用:

import android.provider.Settings;
 
String whichSound = null;
whichSound = Settings.Global.CAR_DOCK_SOUND;
ContentResolver cr = mContext.getContentResolver();
final String soundPath = Settings.Global.getString(cr, whichSound);

3. 读写方法

写整型 :Settings.System.putInt(ContentResolver resolver, String name, int value)

//设置系统配置文件中的数据,第一个参数固定的,但是需要上下文,第二个参数是保存的Key,第三个参数是保存的value

boolean changeBluetoothName = Settings.System.putInt(getContentResolver(), "changeBluetoothName", 1);

读整型Settings.System.getInt(ContentResolver resolver, String name,int default_value)

//获取系统配置文件中的数据,第一个参数固定的,但是需要上下文,第二个参数是之前保存的Key,第三个参数表示如果没有这个key的情况的默认值

int blueFlag = Settings.System.getInt(getContentResolver(), "changeBluetoothName", 0);

写字符串 Settings.System.putString(ContentResolver resolver, String name, String value)

读字符串 Settings.System.getString(ContentResolver resolver, String name)

其它类型读写等类似

注意:如果是app项目且非系统权限,项目的AndroidMainfes.xml文件中添加如下权限:

<uses-permission android:name="android.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ʚ兔子的先森ɞ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值