标签

, ,

1、时间与时区有2个设置在/system/app/SettingsProvider.apk自带的XML(res/values/defaults.xml)里:
<bool name=”def_auto_time”>true</bool>
<bool name=”def_auto_time_zone”>true</bool>
且默认都为true,依据需要,可以将后一个改为false,防止自动更改时区设置;
重新编译安装了SettingsProvider.apk后,注意删掉下面的文件并重启android环
境,否则不会生效:
/data/data/com.android.providers.settings/databases/settings.db

2、手工的时区设置通过设置persist.sys.timezone属性来得到,我们所需要的值为Asia/Shanghai:
root@android:/ # getprop persist.sys.timezone
Asia/Shanghai
而以persist.开头的属性均保存在/data/property/下以属性名作为文件名形式
存在,如/data/property/persist.sys.timezone
root@android:/ #cat /data/property/persist.sys.timezone
Asia/Shanghairoot@android:/ #
注:文件保存的字符串后无回车字符
所以我们可以:
A、在启动init进程之前放置符合要求的/data/property/persist.sys.timezone文件
B、或者以如下代码修改时区设置:
final AlarmManager alarm = (AlarmManager)activity.getSystemService(Context.ALARM_SERVICE);
alarm.setTimeZone(“Asia/Shanghai”);

3、当使用settimeofday()来设置系统时间时,若使用mktime()来计算以秒数代表的时间时,会自动加上或者减去当前时区的差值,得到的秒为UTC时间;
而且这个地方还有点问题,当mktime()的参数中tm.tm_isdst为>0的数时,还会再减去1个小时,这个行为可能是个bug。

Advertisements