[DESCRIPTION]
10年積累的網(wǎng)站設(shè)計制作、網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有眉縣免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
如何修改為出廠時區(qū)為指定的時區(qū)和默認(rèn)的日期?
[Solution]
時間信息預(yù)設(shè)信息都是0, 在rtc 初試化 時候設(shè)置的.
由于RTC 基本上不會斷電,所以它的初試化只做一次,即使重新download bin 檔.
用FlashTool 執(zhí)行Format, 再執(zhí)行download (不要用format --download button), 或
者RTC斷電一段時間,就可以觀察到日期恢復(fù)到出廠值。
修改RTC默認(rèn)日期:
修改文件
\alps\mediatek\custom\[project]\preloader\ inc\cust_rtc.h
\alps\mediatek\custom\[project]\kernel\rtc\rtc\rtc-mt65XX.h
#define RTC_DEFAULT_YEA 2012
#define RTC_DEFAULT_MTH 2
#define RTC_DEFAULT_DOM 1
修改默認(rèn)日期:
在JB之前,進(jìn)行以上修改即可,如果是JB以后,還需要進(jìn)行以下修改:
(如果下面的修改還是無效,請參考FAQ08916,F(xiàn)AQ08719,F(xiàn)AQ07606)
[File]
framework\services\java\com\android\server\NetworkTimeUpdateService.java
[Function]
systemReady()
[Code]
if(isFirstBoot){
Time today = new Time(Time.getCurrentTimezone());
today.setToNow(); // 將時間恢復(fù)到RTC時間
today.set(1, 0, mDefaultYear ); //設(shè)立出廠默認(rèn)日期,mDefaultYear是默認(rèn)年份
如果想恢復(fù)出廠設(shè)置后,系統(tǒng)時間不變,可使用today.setToNow();
如果想恢復(fù)出廠設(shè)置后,系統(tǒng)時間也恢復(fù)成出廠時間,可使用today.set(1, 0, mDefaultYear );
這個today.set方法有6個參數(shù)的重載,可以精確到秒,具體使用方法請自行查詢API,所以在這里設(shè)
置系統(tǒng)默認(rèn)時間就可以了。
如果要設(shè)置出廠默認(rèn)年份需要修改
1) mediatek\frameworks\base\res\res\values\config.xml將
default_restore_year 修改成 2013
!-- default year for first power on--
integer name="default_restore_year"2013/integer
2)
frameworks\base\services\java\com\android\server\NetworkTimeUpdateService.
java
if(today.year = 2010){ //刪除此行判斷條件
today.set(today.monthDay, today.month, 2013);
Log.d(TAG, "Set the year to 2013");
SystemProperties.set(BOOT_SYS_PROPERTY, "false");
SystemClock.setCurrentTimeMillis(today.toMillis(false));}
修改后的表現(xiàn)可通過Setting菜單-時間日期設(shè)置):
修改默認(rèn)時區(qū):
在系統(tǒng)屬性中增加下面字段(假設(shè)改為Moscow)
路徑:\alps\mediatek\config\[project]\system.prop
persist.sys.timezone = Europe/Moscow
注意:默認(rèn)時區(qū)的修改會影響默認(rèn)時間的值,會根據(jù)與格林尼治標(biāo)準(zhǔn)時間差來更新時間,這是正常
現(xiàn)象。如當(dāng)前設(shè)置為中國標(biāo)準(zhǔn)時間GMT+8:00,則手機(jī)的出廠時間會變?yōu)?:00。
android平臺,經(jīng)常會遇到產(chǎn)品需要更改系統(tǒng)默認(rèn)時區(qū)日期時間的問題。android更改時區(qū)相對比較容易實現(xiàn),網(wǎng)上也有很多資料,直接設(shè)置一個屬性即可,例如設(shè)置上海東八區(qū),persist.sys.timezone=Asia/Shanghai。但是如何實現(xiàn)更改默認(rèn)系統(tǒng)時間呢?
在android中,Linux內(nèi)核中、rtc時鐘,默認(rèn)的起始日期都是1970年1月1日,那么如何把默認(rèn)日期指到2012-01-01呢?筆者在實踐中發(fā)現(xiàn),在RTC驅(qū)動中可以很容易實現(xiàn)。在RTC驅(qū)動加載的時候,一般都有個probe函數(shù)需要先執(zhí)行,因此在probe函數(shù)里下手最直接有效。RTC從1970-01-01開始,那當(dāng)然很容易把默認(rèn)值設(shè)置到2012-01-01,所需要設(shè)置的seconds也就是從1970-01-01所差的秒數(shù),以秒為單位。因此,一旦讀出來的RTC值小于我們預(yù)想的值比如2012-01-01(1325402913)小,我們就把它設(shè)置到這個時間點(diǎn)。
seconds = rtc_read_time();
printk("init PMU/RTC time to %ld \n", seconds);
if(seconds = 1325402913) {
seconds = 1325402913;/*2012-01-01*/
ret = rtc_set_time(seconds);
RTC_DBG("Init Set time: %ld, ret =0x%x\n", seconds, ret);
}
筆者通過結(jié)果顯示,在android平臺上是可行的。要設(shè)置到哪天幾點(diǎn)幾分,只要算好具體1970-01-01 00:00差的秒數(shù)即可,簡單明了。這樣客戶、用戶使用起來更方便一些。
這個today.set方法有6個參數(shù)的重載,可以精確到秒,具體使用方法請自行查詢API,所以在這里設(shè)
置系統(tǒng)默認(rèn)時間就可以了。
如果要設(shè)置出廠默認(rèn)年份需要修改
1) mediatek\frameworks\base\res\res\values\config.xml將
default_restore_year 修改成 2013
!-- default year for first power on--
integer name="default_restore_year"2013/integer
2)
frameworks\base\services\java\com\android\server\NetworkTimeUpdateService.
java
if(today.year = 2010){ //刪除此行判斷條件
today.set(today.monthDay, today.month, 2013);
Log.d(TAG, "Set the year to 2013");
SystemProperties.set(BOOT_SYS_PROPERTY, "false");
SystemClock.setCurrentTimeMillis(today.toMillis(false));}
修改后的表現(xiàn)可通過Setting菜單-時間日期設(shè)置):
解決方案:以加入Nigeria時區(qū)為例,應(yīng)該如下修改:
1.找到該國家在zoneinfo中的時區(qū)信息。
區(qū)信息的文件可以從下載到最新的,解壓tzdata201x*.tar.gz后,在每個地區(qū)的txt文件中有城市的時區(qū)信息,搜索是否有您要添加的城市,則該時區(qū)可以添加;如果沒有搜索到相關(guān)的國家或城市,則需要考慮使用別的城市的時區(qū)。
比如在africa.txt中搜索Nigeria,可以找到下面的內(nèi)容:
# Nigeria
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Africa/Lagos 0:13:36 - LMT 1919 Sep
1:00 - WAT
這樣可以看到,尼日利亞只有一個城市可以作為時區(qū)ID,這個ID就是Africa/Lagos。
2.修改packages/apps/Settings/res/xml-xx-xx/timezones.xml (xx-xx表示不同的語言和區(qū)域),添加下面的內(nèi)容:
!-- timezones.xml 用于在setting中增加一個時區(qū)設(shè)置項 --
timezone id="Africa/Lagos"Lagos/timezone
3.修改framework/base/core/res/res/xml/time_zones_by_country.xml,添加下面的內(nèi)容
!--time_zones_by_country.xml 這個用于自動匹配時區(qū)時使用,通過country code找一個時區(qū) --
!-- Nigeria, 1:00 --
timezone code="ng"Africa/Lagos/timezone
!-- 這里的code="ri"表示國家代碼,比如中國對應(yīng)cn,美國對應(yīng)us,不清楚可以維基百科查詢ISO_3166-1--
這是添加一個時區(qū)的步驟,如果要添加多個時區(qū),請重復(fù)或批量執(zhí)行以上步驟。
安卓開發(fā)app有時候存在時區(qū)的設(shè)置,可能有時候這樣設(shè)置時區(qū)
AlarmManager mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
mAlarmManager.setTimeZone("GMT+08:00");
導(dǎo)致其他應(yīng)用時間發(fā)生錯亂,可以修改這樣設(shè)置時區(qū),或許可以解決問題
TimeZone chinaTimeZone = TimeZone.getTimeZone("GMT+8");
TimeZone.setDefault(chinaTimeZone);