zoukankan      html  css  js  c++  java
  • Android中Settings默认值的设置

    设置Settings的默认值有两种方式

    A. 在获取是有一个接口可以进行默认值设置,当数据库中查询不到该值时,就会返回传入的默认值。

    public static int getInt(ContentResolver cr, String name, int def) {
                return getIntForUser(cr, name, def, cr.getUserId());
            }

    其中int def就是要写入的默认值。

    B. 在SettingProvider中进行设置,也就是写入到数据库中

    首先,在SettingsProvider/res/values/defaults.xml中写入Settings中的值对应的默认值,例如:

    ./packages/SettingsProvider/res/values/defaults.xml:40:    <bool name="def_wifi_display_on">false</bool>

    然后在DatabaseHelper.java中创建完数据库进行默认值的插入

    ./packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java:2559:            loadBooleanSetting(stmt, Settings.Global.WIFI_DISPLAY_ON,R.bool.def_wifi_display_on);

    该插入的流程为:

    onCreate(SQLiteDatabase db) -> loadSettings(db) -> loadSystemSettings(db);loadSecureSettings(db);loadGlobalSettings(db);

    源码如下:

    public void onCreate(SQLiteDatabase db) {
            db.execSQL("CREATE TABLE system (" +
                        "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
                        "name TEXT UNIQUE ON CONFLICT REPLACE," +
                        "value TEXT" +
                        ");");
            db.execSQL("CREATE INDEX systemIndex1 ON system (name);");

            createSecureTable(db);

            // Only create the global table for the singleton 'owner/system' user
            if (mUserHandle == UserHandle.USER_SYSTEM) {
                createGlobalTable(db);
            }

            db.execSQL("CREATE TABLE bluetooth_devices (" +
                        "_id INTEGER PRIMARY KEY," +
                        "name TEXT," +
                        "addr TEXT," +
                        "channel INTEGER," +
                        "type INTEGER" +
                        ");");

            db.execSQL("CREATE TABLE bookmarks (" +
                        "_id INTEGER PRIMARY KEY," +
                        "title TEXT," +
                        "folder TEXT," +
                        "intent TEXT," +
                        "shortcut INTEGER," +
                        "ordering INTEGER" +
                        ");");

            db.execSQL("CREATE INDEX bookmarksIndex1 ON bookmarks (folder);");
            db.execSQL("CREATE INDEX bookmarksIndex2 ON bookmarks (shortcut);");

            // Populate bookmarks table with initial bookmarks
            boolean onlyCore = false;
            try {
                onlyCore = IPackageManager.Stub.asInterface(ServiceManager.getService(
                        "package")).isOnlyCoreApps();
            } catch (RemoteException e) {
            }
            if (!onlyCore) {
                loadBookmarks(db);
            }

            // Load initial volume levels into DB
            loadVolumeLevels(db);

            // Load inital settings values
            loadSettings(db);
        }

    private void loadSettings(SQLiteDatabase db) {
            loadSystemSettings(db);
            loadSecureSettings(db);
            // The global table only exists for the 'owner/system' user
            if (mUserHandle == UserHandle.USER_SYSTEM) {
                loadGlobalSettings(db);
            }
        }

    private void loadGlobalSettings(SQLiteDatabase db) {
            SQLiteStatement stmt = null;
            try {
                stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
                        + " VALUES(?,?);");

                // --- Previously in 'system'
                loadBooleanSetting(stmt, Settings.Global.AIRPLANE_MODE_ON,
                        R.bool.def_airplane_mode_on);

                loadBooleanSetting(stmt, Settings.Global.THEATER_MODE_ON,
                        R.bool.def_theater_mode_on);

                loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_RADIOS,
                        R.string.def_airplane_mode_radios);

                loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS,
                        R.string.airplane_mode_toggleable_radios);

                loadBooleanSetting(stmt, Settings.Global.ASSISTED_GPS_ENABLED,
                        R.bool.assisted_gps_enabled);
    .....
    loadBooleanSetting(stmt, Settings.Global.WIFI_DISPLAY_ON,
                        R.bool.def_wifi_display_on);
    ......

    }
  • 相关阅读:
    jquery ajax 赋值问题, 后面程序判断逻辑用
    jquery formValidator 表单验证插件, ajax无法传值到后台问题的解决
    学习写了一个点击按钮倒计时的jquery小插件
    点击按钮复制指定代码
    discuz 修改积分策略( 在周期中添加"每周" )
    php获取本周周一、周日时间,上周周一、周日时间,本月第一天,本月最后一天,上个月第一天,最后一天时间
    php用正则判断是否为数字
    discuz 标签详解
    用dwz时, 由于粗心产生的一些问题(记录方便自己查阅)
    yii mailer 扩展发送邮件
  • 原文地址:https://www.cnblogs.com/wangzhe1635/p/9811999.html
Copyright © 2011-2022 走看看