Android保存数据到系统数据库中:Settings.System

有时候我们一些设置属性要保存到本地,防止软件卸载后配置属性消失。
比如我今天就有个修改手机蓝牙名称显示的功能,但是只需要修改一次,并且进行标记,并保存这个标识,如果程序卸载,重新安装也不需要再修改,这里就是要保存这个标识,来判断是否需要修改名称。
要实现这个功能,SharePreference是不行的了,本地文件file保存呢,是可以的,但是比较麻烦,而且有被删掉的可能。
这里介绍一个比较简单、实用的方法:
这个方法就是把标识保存到系统配置(系统数据库)文件中,即使程序卸载也不影响,系统的配置文件。

一.在手机中的位置

/data/system/users/0/settings_system.xml 文件中(如果你修改的是 global 或者 secure 的,就在对应的 settings_global.xml / settings_secure.xml 中

二.创建数据库的实现代码
frameworks\base\packages\SettingsProvider\src\com\android\providers\settings 的 DatabaseHelper 类里面

三. 读写的方法如下
写字符串Settings.System.putString(ContentResolver resolver, String name, String value)
读字符串Settings.System.getString(ContentResolver resolver, String name)

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

四.具体的操作,我是拿设置下的电池界面来做实验的,具体的是在 PowerUsageSummary 类中的 OnCreate()方法中,核心的代码如下

//CodeDu add    
import android.provider.Settings;
import android.util.Log;
import android.content.Context;
//CodeDu add 

//CodeDu add 
// Context cont = this.getApplicationContext();
Context cont = getContext();
Settings.System.putString(cont.getContentResolver(),"shangqin", "juajuan520");
String msg;
int get_int=0;
msg=Settings.System.getString(cont.getContentResolver(),"shangqin");
Settings.System.putInt(cont.getContentResolver(),"dulei", 520111);
get_int=Settings.System.getInt(cont.getContentResolver(),"dulei",0);
String text = String.valueOf(get_int);
Log.d("CodeDu", msg);
Log.d("CodeDu", text);
//CodeDu add 

五.adb 查看设置的属性值
抓settingsProvider:

  adb shell settings get global facelock_unlock_device
  adb shell settings get system key_unlock_timeout
发布了3 篇原创文章 · 获赞 1 · 访问量 104

猜你喜欢

转载自blog.csdn.net/qq_22233425/article/details/104722516