Android(安卓)使用Settings 数据库demo(源码)以及adb 读写settings数据库
Android 使用Settings 数据库demo(附源码)
一、android系统很多设置的数据都保存在settings数据库里面,例如音量大小、休眠时间、屏幕亮度等。
二、adb查看和写settings数据库里面的值。
2. 1 安全性的用户偏好系统设置,第三方APP有读没有写的权限
secure
Settings.Secure
content://settings/secure
2. 2 所有的编号设置,对系统的所有用户公开,第三方APP有读没有写的权限
global
Settings.Global
content://settings/global
3.3 包含各种各样的用户偏好系统设置
system
Settings.system
content://settings/system
三、实例学习,demo的功能一是向setting数据库某个key写value,然后读出来。功能二是侦听settings数据库里面某个key的value,如果改变会有提醒。
3.1 settingdatebasedemo\app\src\main\java\com\example\settingdatebasedemo\MainActivity.java
package com.example.settingdatebasedemo;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.provider.Settings;import android.database.ContentObserver;import android.os.Handler;import android.util.Log;import android.view.View;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity { private TextView tv_time; private int i=0; private static String TAG="settingdatebasedemo"; ChangeContentObserver mChangeContentObserver = null; ChangeSContentObserver mChangeSContentObserver = null; // 如果第三方应用是写不到Setting 数据库的,必须需要系统权限 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_time = (TextView) findViewById(R.id.itext); mChangeContentObserver = new ChangeContentObserver(); mChangeSContentObserver= new ChangeSContentObserver(); getContentResolver().registerContentObserver(Settings.Global.getUriFor("global_test"), true, mChangeContentObserver); getContentResolver().registerContentObserver(Settings.System.getUriFor("volume_ring_speaker"), true, mChangeSContentObserver); } public void write_settings_database(View v) { i+=6; SetGlobalData(this.getApplicationContext(),"global_test", i); //getContentResolver().notifyChange(Settings.Global.getUriFor("haiyue"),null); //这个方法也是要在有上下文的地方执行,一般是在自定义的Provider中执行,第一个是url对象,第二个参数是null //getContext().getContentResolver().notifyChange(URI,null); //数据进行增删查成功后,都执行一下上面这个方法即可。 tv_time.setText(String.valueOf(GetGlobalData(this.getApplicationContext(),"global_test"))); } class ChangeSContentObserver extends ContentObserver { public ChangeSContentObserver (Handler handler) { super(handler); } public ChangeSContentObserver () { // TODO Auto-generated constructor stub super(new Handler()); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); Toast.makeText(MainActivity.this,"i:volume_ring_speaker value has changed!", Toast.LENGTH_LONG).show(); Log.d(TAG, "ChangeSContentObserver -->volume_ring_speaker value changed(" + selfChange + ") "); } } /* * 监听值变化 */ class ChangeContentObserver extends ContentObserver { public ChangeContentObserver (Handler handler) { super(handler); } public ChangeContentObserver () { // TODO Auto-generated constructor stub super(new Handler()); } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); Toast.makeText(MainActivity.this,"i:global_test value has changed!", Toast.LENGTH_LONG).show(); Log.d(TAG, "ChangeContentObserver --> onChange(" + selfChange + ") "); } } //Setting 数据库中写值 this.getApplicationContext() public static void SetGlobalData(Context cxt,String name,int value) { try { boolean rtv=false; Log.i(TAG,"SetGlobalData rtv="+rtv); rtv=Settings.Global.putInt(cxt.getContentResolver(), name, value); Log.i(TAG,"SetGlobalData rtv="+rtv); } catch (Exception e) { if (e != null) { Log.i(TAG, "setRecorderRear(Context," + value + ")> " + e.getMessage()); } } } //Setting 数据库中读取值 public static int GetGlobalData(Context cxt,String name) {// Log.i("TAG",getdata() ) try { return Settings.Global.getInt(cxt.getContentResolver(), name, -1); } catch (Exception e) { if (e != null) { Log.i(TAG, "getRecorderRear(Context)> " + e.getMessage()); } } return 0; } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); getContentResolver().unregisterContentObserver(mChangeContentObserver); }}
3.2 android_studio_app\settingdatebasedemo\app\src\main\res\layout\activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
3.3 settingdatebasedemo\app\src\main\AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
注意添加
四、真机测试。
4.1 因为写settings数据库需要系统级app,adb push到机子里面
adb push settingdatebasedemo\app\build\outputs\apk\debug\settingdatebasedemo.apk /system/priv-app/
4.2 demo app运行效果
五:Android Studio 源码下载路径:
https://download.csdn.net/download/qq_37858386/12513319
更多相关文章
- Android(安卓)M 新的运行时权限开发者需要知道的一切
- Android(安卓)FileProvider详细解析和踩坑指南
- 2017.03.12 Android卡顿分析
- android如何导入已有数据库
- android设备uuid、udid
- Android(安卓)SQlite数据库的使用(一)-一学就会android数据库
- Android系统数据传递机制
- android按键静音键功能实现
- Android(安卓)6.0 运行时权限处理完全解析