zoukankan      html  css  js  c++  java
  • MTK Android Android数据保存到系统数据库

    如果有留意Android中系统设置Settings里面的源码,你会发现代码中频繁用到了Settings.System操作,该类通过键值对的形式,将一些特定的值以全局的模式保存到Setting的数据库中,

    我们可以通过它提供的get或者put形式的方法对其中的数据进行读写操作,(非系统级别的应用需要添加对应的权限)。当然,如果能够对frameworks进行修改,我们甚至可以在该类中添加一些特定的值,以方便自己或他人使用。
    一、通过Settings.System进行读写

    //其中"getXXX"代表对应的类似方法,如getInt()、getBoolean、putString()等。
    //通过变量名称获取值,如果变量不存在,数据库中没有设置过初始值或者该值类型不对,将抛出SettingNotFoundException异常
    Settings.System.getXXX(ContentResolver cr, String name);
    //通过变量名称获取值,如果发生上面方法中导致异常的情况,将返给定的默认值
    Settings.System.getXXX(ContentResolver cr, String name, XXX def);
    //将指定名称的值写入数据库
    Settings.System.putXXX(ContentResolver cr,String name, XXX Value);

    非系统权限,需要在App项目的AndroidMainfes.xml文件中添加如下权限:

    <uses-permission android:name="android.permission.READ_SETTINGS" />  

    <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 

     

    二、在Settings.System添加一个自定义的全局变量

    frameworksasecorejavaandroidproviderSettings.Java下,打开该文件,搜索关键词 SETTINGS_TO_BACKUP ,共有两处,

    一处是在Settings里面,另一处在内部类Settings.System里面,在SETTINGS_TO_BACKUP数组上面添加自 定义变量,同时在该数组里面添加自定义变量名称,

    Settting和内部类System都需要添加(共四个地方),比如自定义系统变量 SYSTEM_ZWH:

     

     

    三、如何使用全局变量

    a:定义变量

    frameworks/base/core/java/android/provider/Settings.java

       /**
        * mobile model             
        * @hide
        */
        public static final String MOBILE_MODEL="mobile_model";

     

            /**
             * Settings to backup. This is here so that it's in the same place as the settings
             * keys and easy to update.
             *
             * NOTE: Settings are backed up and restored in the order they appear
             *       in this array. If you have one setting depending on another,
             *       make sure that they are ordered appropriately.
             *
             * @hide
             */
            public static final String[] SETTINGS_TO_BACKUP = {

         MOBILE_MODEL,  //mobile model 
     
    b:初始化变量
    frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
    loadSetting(stmt, Settings.System.MOBILE_MODEL, VERSION.RELEASE); 
    VERSION.RELEASE:
    frameworks/base/core/java/android/os/Build.java
        /** Various version strings. */
        public static class VERSION {
     
        /**
         * The user-visible version string.  E.g., "1.0" or "3.4b5".
         */
         public static final String RELEASE = getString("ro.build.version.release");
     
    c:使用全局变量赋值
    packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java
    Settings.System.putString(this.getContentResolver(), Settings.System.MOBILE_MODEL, "4.4");
     
    d:使用全局变量获取值
    packages/apps/Select/src/com/mtk/select/selectActivity.java
    EditText sysEdit = (EditText) findViewById(R.id.system_name_edit);
    sysEdit.setText(Settings.System.getString(this.getContentResolver(),
            Settings.System.MOBILE_MODEL));//mobile model
     
     
     
     
     

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


    有时候我们一些设置属性要保存到本地,防止软件卸载后配置属性消失。 

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

    import android.provider.Settings;
    import android.util.Log;
    import android.content.Context;

    //设置系统配置文件中的数据,第一个参数固定的,但是需要上下文,第二个参数是保存的Key,第三个参数是保存的value
    boolean changeBluetoothName = Settings.System.putInt(getContentResolver(), "changeBluetoothName", 1);

    //获取系统配置文件中的数据,第一个参数固定的,但是需要上下文,第二个参数是之前保存的Key,第三个参数表示如果没有这个key的情况的默认值
    int blueFlag = Settings.System.getInt(getContentResolver(), "changeBluetoothName", 0);

    这里的保存数据类似SharePreference,保存的是键值对key-value,但是这里的数据是保存到系统文件中的,跟程序无关,但是在程序中是可以能够获取的。
    上面示例代码保存的是int数据,也可以使用putString保存String数据,putByte保存byte数据等等。。。
    同样的,获取也是根据保存的数据类型来获取。

    运行前还要添加一个权限,否则会报错
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>


    据说这个系统配置文件的位置是:
    /data/data/com.android.providers.settings/databases/


    数据库控制的代码:
    frameworksasepackagesSettingsProvidersrccomandroidproviderssettings的DatabaseHelper类里

  • 相关阅读:
    Datesheet 参数手册
    2017.10.23 Arduino Atmel EFM32低功耗监测
    New Concept English three(21)
    The disadvantage for manager has a part-time job as a trainer
    New Concept English three(20)
    Python+Qt学习随笔:PyQt中常用的事件处理函数
    Python+Qt学习随笔:PyQt图形界面应用的事件处理流程
    PyQt学习遇到的问题:重写notify发送的消息为什么首先给了一个QWindow对象?
    PyQt学习随笔:PyQt中捕获键盘事件后获取具体按键值的方法
    PyQt学习随笔:重写组件的event方法捕获组件的事件
  • 原文地址:https://www.cnblogs.com/cyqx/p/5829626.html
Copyright © 2011-2022 走看看