1.用途及作用:

alps\frameworks\base\core\java\android\provider\Settings.java

Settings下的属性实际分为System,Global等,一般作用是用于存储系统默认属性值,通过监听读写属性值的变化执行相关的逻辑修改系统属性值,也可以用于系统间跨进程通信。

2.基本使用:

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

Settings.System.getString(mContext.getContentResolver(), String name);

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

Settings.System.putString(mContext.getContentResolver(),String value);

说明:实际可用自己去跟Settings的逻辑,其实读写的string/int/boolean等类型的方法,最后存储的都是object类型.

3.系统调用流程

以默认亮度为例,最开始定义是在

alps\frameworks\base\packages\SettingsProvider\res\values\defaults.xml

里面的

<integer name="def_screen_brightness">102</integer>

,之后会在

\alps\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java

中的loadSystemSettings(SQLiteDatabase db)中

loadIntegerSetting(stmt, Settings.System.SCREEN_BRIGHTNESS, R.integer.def_screen_brightness);

被加载进来,然后会存入系统的数据库中

alps\frameworks\base\core\java\android\provider\Settings.java

alps\frameworks\base\core\java\android\provider\Settings.java

/**
         * The screen backlight brightness between 0 and 255.
         */

public static final String SCREEN_BRIGHTNESS = "screen_brightness";

数据保存在机器的data/data/com.android.providers.settings/databases/Settings.db文件里可以通过导出表格查看数据.

当亮度的值发生改变之后会调用Settings.System的put方法存入数据库中。

说明:参考以上流程可以添加 自定义的数据库逻辑,可用于系统进程间数据通信,类似于apk中的偏好和数据库,优点是各个apk及服务间可以直接调用

4.数据变化监听

实际以adb开关为例,当设置中打开关闭adb时会往Settings.Global.ADB_ENABLED中写值,当值变化的时候会走onchange中去执行实际的adb开关的功能逻辑

private class AdbSettingsObserver extends ContentObserver {
        public AdbSettingsObserver() {
            super(null);
        }
        @Override
        public void onChange(boolean selfChange) {
            boolean enable = (Settings.Global.getInt(mContentResolver,
                    Settings.Global.ADB_ENABLED, 0) > 0);
            mHandler.sendMessage(MSG_ENABLE_ADB, enable);
        }

}

--------

import android.database.ContentObserver;
mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.SCREENSHOT_BUTTON_SHOW), false, mScreenshotButtonShowObserver);

private ContentObserver mScreenshotButtonShowObserver=new ContentObserver(new Handler()) {
        public void onChange(boolean selfChange) {
            boolean isShow=Settings.System.getInt(mContext.getContentResolver(), 
Settings.System.SCREENSHOT_BUTTON_SHOW, 1)==1;
            
        };
    };

--------

5.总结:出发点是授人以渔,而不是授人以鱼,很多修改系统默认属性的值都是直接改default.xml的具体数值就可以了,常用的也是百度能百度到,当碰到不熟悉的默认属性值的时候,比如是设置里面的adb开关,可以去设置里面去跟代码找到那个点击事件的逻辑,那里应该会有个开关动作的具体逻辑,跟下去会发现是会去写值操作,然后找到那个ADB_ENABLED字符,然后去framework/base下面去搜索便可以跟踪相关的逻辑,一般的流程系统在设置默认值的时候都是在一个地方定义一个默认值,然后将这个值存入数据库中,修改的时候就将修改的值重新写进入,然后通过数据监听去实现具体的逻辑。与此同时做客制化的修改的时候可能会需要在不同的apk或者进程间通信,此时可以利用系统的数据库的读写操作实现进程间通信和数据共享的功能。

android 系统数据库Settings属性使用及相关介绍相关推荐

  1. android 系统数据库Settings的使用整理

    概述:做系统或者系统应用开发时经常会需要用到跨进程通信,并且需要传递状态值时,可以通过系统数据库的属性进行通信,比如原生系统的设置中的设置休眠时间,usb调试开关等,都是通过Settings.apk中 ...

  2. Android系统Surface机制的SurfaceFlinger服务简要介绍和学习计划

    前面我们从Android应用程序与SurfaceFlinger服务的关系出发,从侧面简单学习了SurfaceFlinger服务.有了这些预备知识之后,我们就可以从正面来分析SurfaceFlinger ...

  3. Android系统(45)--Monkey 测试相关知识

    Monkey 测试相关知识点 Monkey 在开发中非常常见,本篇主要梳理monkey 测试相关知识点.主要包括以下内容 整机 monkey 测试命令 app monkey 测试命令 判断Monkey ...

  4. android 自定义 theme,Android 系统添加自定义主题属性

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 问题 在开发中需要将开发的多个应用在刚启动的时候使用同一张图作为启动的背景图,且可以动态变化,图片放置在本地的某一个目录 ...

  5. Android系统(237)---OTA升级基本信息介绍

    OTA升级基本信息介绍 Common types of OTA upgrade include GOTA(Google OTA),MOTA(MTK OTA),  Adups Fota(广升FOTA), ...

  6. 数据库的分类及产品相关介绍

    数据库的概述 使用数据库的优点 数据库的种类 数据库通常分为层次式数据库.网络式数据库和关系式数据库三种.而不同的数据库是按不同的数据结构来联系和组织的,而在当今的互联网中,最常见的数据库模型主要是两 ...

  7. android 设置界面10秒无操作退休,关于Android系统无用户操作相关处理

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 最近开发产品遇到一个需求:当Android系统若干时间内无用户操作响应时启动多媒体轮播应用. ####思路1:监听输入事 ...

  8. Android系统(手机平板)根目录详解

    Android手机平板根目录详解 转自:http://blog.csdn.net/lpjishu/article/details/59074868?ref=myread Android根目录 1.mn ...

  9. Android系统Surface机制的SurfaceFlinger服务的线程模型分析

    在前面两篇文章中,我们分析了SurfaceFlinger服务的启动过程以及SurfaceFlinger服务初始化硬件帧缓冲区的过程.从这两个过程可以知道,SurfaceFlinger服务在启动的过程中 ...

最新文章

  1. 扒出了3867篇论文中的3万个基准测试结果,他们发现追求SOTA其实没什么意义
  2. 更改hadoop native库文件后datanode故障
  3. html中从下往上遮罩效果,css制作从下往上逐渐显示的div
  4. 四种常见的 POST 提交数据方式对应的content-type取值
  5. linux设置环境变量_什么是linux环境变量
  6. 最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)
  7. 编译:ffmpeg,精简ffmpeg.exe
  8. 李佳琦谈公益:时代成就了我 我也要回馈社会
  9. python机器学习应用mooc_(1)KNN
  10. [网站设计] 素材网罗
  11. 迅雷跃居全球BT市场第一
  12. C语言的自动关机程序和一个用来整人的小程序
  13. 房产经纪龙头居安思危孵化「贝壳」,如何用数字化解找房之痛?
  14. six MySQL 主主
  15. 全智通A+常见问题汇总解答—A+打印本次派工单,结果显示所派工项目
  16. MindManager思维导图画法教程
  17. Java-JUC-彻底搞懂JUC
  18. 思迈特软件Smartbi:传统BI被“革命”,AI是BI技术未来的发展趋势
  19. 特朗普遭抗议:美国投资人仍看好可再生能源
  20. 深入了解jvm虚拟机

热门文章

  1. python win10 arm_树莓派3B+安装Windows 10 ARM
  2. 基于java校园课室资源预约系统设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  3. 如何学习大数据,到底怎么学?数据科学概论与大数据学习误区在哪
  4. 用七张表就能轻松管理存货
  5. wordPress mac本地安装
  6. 7-6 青蛙过河 (20 分)
  7. linux黑洞文件是什么,Linux黑洞文件
  8. python中符号计算三维可视化_Python科学计算三维可视化章节答案
  9. 【网络】常见的网络面试题
  10. 【有利可图网】网页设计没头绪?30个中文版优秀网页设计送上