Android中Settings默认值的设置 | 您所在的位置:网站首页 › 使用默认system › 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: false然后在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); ......} |
CopyRight 2018-2019 实验室设备网 版权所有 |