修改Settting中的出廠預設值

來源:互聯網
上載者:User
文章目錄
  • 一、目的
  • 二、參考
  • 三、涉及的檔案
  • 四、我的修改
  • 五、總結
一、目的

      將手機的預設12小時制改為24小時制

二、參考

       1.http://blog.csdn.net/caszhao/archive/2010/11/04/5986900.aspx

       2.http://hi.baidu.com/wishwingliao/blog/item/32e13ddbb66d7c72d0164eaa.html

 

        擴充閱讀:1. http://my.unix-center.net/~Simon_fu/?p=535

                     2. http://blog.csdn.net/chenzheng_java/archive/2011/03/16/6253181.aspx

三、涉及的檔案

          1.

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

          這個檔案是用來產生setting.db的。

        2.frameworks/base/packages/SettingsProvider/res/values/defaults.xml 

          一般把setting.db中各個表的出廠預設初始值放在這個檔案中,在DatabaseHelper.java 中讀取。

        3./data/data/com.android.providers.settings/databases/setting.db

            

此資料庫檔案是在開機初始化時產生的,而非編譯生

成。手機檔案系統下用來儲存設定中值的資料庫。

 

           儲存資料的表是system,欄位是time_12_24

           讀取其值:Settings.System.getString(context.getContentResolver(),Settings.System.TIME_12_24)

           設定其值: Settings.System.putString(getContentResolver(), Settings.System.TIME_12_24,is24Hour? HOURS_24 : HOURS_12)

四、我的修改

                1.frameworks/base/packages/SettingsProvider/res/values/defaults.xml

                    增加預設值:

                      <integer name="def_time_12_24">24</integer>

                 2.frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

                  在 loadSystemSettings(SQLiteDatabase db)最後增加初始化資料庫的值:

                          loadUISoundEffectsSettings(stmt);</p><p> loadBooleanSetting(stmt, Settings.System.VIBRATE_IN_SILENT,<br /> R.bool.def_vibrate_in_silent);<br /> //added by yueo @20110609<br /> System.out.println("Entry :loadSystemSettings()......");<br />/* loadStringSetting(stmt, Settings.System.TIME_12_24,<br /> R.string.def_time_12_24);*/<br /> //end<br /> loadIntegerSetting(stmt, Settings.System.TIME_12_24,<br /> R.integer.def_time_12_24);</p><p> } finally {<br /> if (stmt != null) stmt.close();<br /> }

五、總結

    上面參考中的兩篇博文講的已經很詳細了,我疑惑的是:

    1.預設值是如何做到唯寫一次的,即DatabaseHelper.java中建立setting.db中的system表,並寫入預設值這段代碼如何做到只在出 廠

後第一次開

機時才運行?而當使用者改變設定後又

不再走這段代碼的?

    2.恢復出廠預設值如何恢複setting中的預設值呢?

  經過研究發現,原來是SQLiteOpenHelper這個類做到的,它是DatabaseHelper的父類,而所有SQLiteOpenHelper的子類必須實現兩個重要方法:onCreate(SQLiteDatabase),onUpgrade(SQLiteDatabase, int, int):

     onCreate:當資料庫第一次被建立的時候被執行,例如建立表,初始化資料等。

  onUpgrade:當資料庫需要被更新的時候執行,例如刪除久表,建立新表。

 

     我們加入的代碼正是在onCreate()中調用的,手機出廠第一次開機初始化時,由於

/data/data/com.android.providers.settings/databases/目錄下沒有setting.db這個檔案,故DatabaseHelper.java中的onCreate()方法會被執行,預設值被寫入相應

的表中,而當使用者再次開機時此資料庫檔案已經存在了,oncreate()也就不再執行,預設值不會被再次寫入,而是保留了使用者設定的值。其實這也回答了第2個疑問,恢復出廠預設值後setting.db這個檔案根本不存在了,再次開機當然會調用onCreate()寫入預設值了(其實adb shell 手動將setting.db刪掉,也會回到預設值啦^_^~

關於SQLiteOpenHelper,可以參考:

          1

.http://www.eoeandroid.com/thread-53950-1-1.html

          2.http://tech.chinaunix.net/a2010/1103/1121/000001121539.shtml

        另外並非Setting中所有的設定項都在setting.db的相應表中有預設值,有的設定項沒有在開機初始化時在資料庫中填充預設值,而是在java層做了處理,如DataFormat.java中判斷,若system表中沒有“time_12_24”欄位,則預設12小時制:


is24HourFormat(Context context) {
        String value = Settings.System.getString(context.getContentResolver(),Settings.System.TIME_12_24);       
        if (value == null) {


           ………………


       }



但是,一旦使用者更改了預設設定,一般都會寫入setting.db的相應表中的。有些還會同步寫入到XML檔案中,如timeformat ,一旦設定了24小時制,就還會寫入到/data/data/com.android.settings/shared_prefs/com.android.settings_preferences.xml
:<boolean name="24 hour" value="ture" />,不過這是由





Preferences類的機制決定的(資訊以XML檔案的形式儲存在 
/data/data



/PACKAGE_NAME
/


shared_prefs




目錄下),ref:http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966587.html


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.