一、需求说明:
开发过程经常会保存一些全局属性提供给其他应用读取,这篇主要讲常用的SettingsProvider。
二、使用场景:
一些系统属性的开关状态常用SettingsProvider来保存,例如设置应用中【节能】的开关,其他应用可读取该状态来判断是否显示节能标志。
三、使用方式:
1、定义出常量
public static final String LIGHT_SWITCH_PROP = "light_switch";
public static final int LIGHT_SWITCH_ON = 0;
public static final int LIGHT_SWITCH_OFF = 1;
2、属性值获取方式
public static int getLightSwitchProp(Context context) {
int result = Constants.LIGHT_SWITCH_OFF;
if (context == null) {
Log.e(TAG, "getLightSwitchProp context is null");
} else {
result = Settings.Global.getInt(context.getContentResolver(), Constants.LIGHT_SWITCH_PROP);
}
return result;
}
3、属性值变化监听类
class SettingSwitchStateObserver extends ContentObserver {
public SettingSwitchStateObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
int lightState = CommonUtils.getLightSwitchProp(mContext);
//DOTO do some thing...
}
}
4、初始化和取消监听(分别在界面启动和销毁的生命周期方法中调用就行)
private void registerSettingProvider() {
settingSwitchStateObserver = new SettingSwitchStateObserver(new Handler());
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Constants.LIGHT_SWITCH_PROP), true, settingSwitchStateObserver);
}
private void unregisterSettingProvider() {
mContext.getContentResolver().unregisterContentObserver(settingSwitchStateObserver);
}
四、SettingsProvider相关知识:
1)SettingsProvider对数据进行了分类,分别是Global、System、Secure三种类型,它们的区别如下:
- Global:所有的偏好设置对系统的所有用户公开,第三方APP有读没有写的权限;
- System:包含各种各样的用户偏好系统设置;
- Secure:安全性的用户偏好系统设置,第三方APP有读没有写的权限。
2)使用特点:
- SettingsProvider只接受int、float、string等基本类型的数据;
- SettingsProvider由Android系统framework进行了封装,使用更加快捷方便;
- SettingsProvider的数据由键值对组成。
3)adb调试设置获取方法:
- 设置方法:adb shell settings put global light_switch 1;
- 获取方法:adb shell settings get global light_switch ;
4)数据存放位置:
- 在Android 6.0版本时,SettingsProvider被重构,Android从性能、安全等方面考虑,把SettingsProvider中原本保存在settings.db中的数据,目前全部保存再XML文件中;
- 系统查看路径:/data/system/users/0。
5)清空时机:
数据写入后,会一直保存在Setting表中,直到系统恢复出厂设置,属性会还原为默认值。