前面写过“ Andorid平台在systemServer里设置默认时间存在原生BUG”https://blog.csdn.net/edsam49/article/details/80990790
这篇文章中介绍了怎么修改默认的日期时间的,这种事情经常会遇到因为产品在不停的迭代,时间也在滚滚向前。
在SystemServer中先比较当前的时间值跟默认时间的tick值来对比,如果晚于预设的默认值就设置为默认值,这个是通过SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);设置下去的,SystemClock又去调用AlarmMangerService的setTime(long millis)设置下去,在闹铃服务里才会调用到平台的 setKernelTime(mNativeData, millis):
public boolean setTime(long millis) {
getContext().enforceCallingOrSelfPermission(
"android.permission.SET_TIME",
"setTime");
if (mNativeData == 0) {
Slog.w(TAG, "Not setting time since no alarm driver is available.");
return false;
}
Slog.d(TAG, "###AlarmManagerService setTime millis= "+millis);
synchronized (mLock) {
return setKernelTime(mNativeData, millis) == 0;
}
}
那么这个默认时间的核心点就是这个millis,那么我们就列一下最近5年可能用到的这个millis值供大家参考使用:
//default 2019-01-01 8:00 time tick value
private static final long EARLIEST_SUPPORTED_TIME = 1546300800000L;
// 2019-07-01 8:00 //1561939200000L
// 2020-01-01 8:00 //1577836800000L
// 2020-07-01 8:00 //1593561600000L
// 2021-01-01 8:00 //1609459200000L
// 2021-07-01 8:00 //1625097600000L
// 2022-01-01 8:00 //1640995200000L
// 2022-07-01 8:00 //1656633600000L
// 2023-01-01 8:00 //1672531200000L
// 2023-07-01 8:00 //1688169600000L
// 2024-01-01 8:00 //1704067200000L
// 2024-07-01 8:00 //1719792000000L
// 2025-01-01 8:00 //1735689600000L