原文:https://online.mediatek.com/FAQ#/SW/FAQ04318


[DESCRIPTION]

手机第一次开机默认是没有定制时区的(默认是GMT:+00:00),但是会有一个默认日期,如2013年1月1日。
如何客制化默认时区以及时间呢?

[Solution]

1、修改RTC默认日期:

Android L之前:
\**alps\mediatek\custom\[project]\preloader\ inc\cust_rtc.h**
**\alps\mediatek\custom\[project]\kernel\rtc\rtc\rtc-mt65XX.h**
Android L或M:
bootable\bootloader\preloader\custom\**[project]**\inc\**cust_rtc.h**

  1. #define RTC_DEFAULT_YEA 2012
  2. #define RTC_DEFAULT_MTH 2
  3. #define RTC_DEFAULT_DOM 1

2、修改默认日期:

framework\services\java\com\android\server\NetworkTimeUpdateService.java

  1. systemReady()
  2. ……
  3. if(isFirstBoot){
  4. Time today = new Time(Time.getCurrentTimezone());
  5. today.setToNow(); // 将时间恢复到RTC时间
  6. today.set(1, 0, mDefaultYear ); //设立出厂默认日期,mDefaultYear是默认年份

如果想恢复出厂设置后,系统时间不变,可使用today.setToNow();
如果想恢复出厂设置后,系统时间也恢复成出厂时间,可使用today.set(1, 0, mDefaultYear );
这个today.set方法有6个参数的重载,可以精确到秒,具体使用方法请自行查询API,所以在这里设置系统默认时间就可以了。

如果要設置出廠默認年份需要修改
1) mediatek\frameworks\base\res\res\values\config.xml将default_restore_year 修改成 2013
(Android L:vendor\mediatek\proprietary\frameworks\base\res\res\values)

  1. <!-- default year for first power on-->
  2. <integer name="default_restore_year">2013</integer>

2) frameworks\base\services\java\com\android\server\NetworkTimeUpdateService.java

  1. if(today.year <= 2010){ //删除此行判断条件
  2. today.set(today.monthDay, today.month, 2013);
  3. Log.d(TAG, "Set the year to 2013");
  4. SystemProperties.set(BOOT_SYS_PROPERTY, "false");
  5. SystemClock.setCurrentTimeMillis(today.toMillis(false));
  6. }

修改后的表现可通过Setting菜单->时间日期设置):
image.png

3、修改默认时区:

在系统属性中增加下面字段(假设改为Moscow)
Android L之前:
mediatek\config\[project]\system.prop
Android L:
device\mediatek\[project]\system.prop

  1. persist.sys.timezone = Europe/Moscow

注意:默认时区的修改会影响默认时间的值,会根据与格林尼治标准时间差来更新时间,这是正常现象。如当前设置为中国标准时间GMT+8:00,则手机的出厂时间会变为8:00。
image.png