android系统都有一个固定的同步系统时间的ntp服务器地址。有时候可能会出现这个地址突然不能够同步时间的情况。为了解决这个问题,需要给系统预设其他的ntp服务器地址。当系统使用当前的ntp服务器地址同步时间失败后,使用预设的其他地址。
具体修改如下:
--- a/frameworks/base/core/java/android/util/NtpTrustedTime.java
+++ b/frameworks/base/core/java/android/util/NtpTrustedTime.java
@@ -98,6 +98,7 @@ public class NtpTrustedTime implements TrustedTime {
private static final boolean LOGD = false;
private static NtpTrustedTime sSingleton;
+ private String[] bak_ntpservers = { "cn.ntp.org.cn", "cn.pool.ntp.org", "ntp.sjtu.edu.cn", "ntp1.aliyun.com", "us.ntp.org.cn", "pool.ntp.org", "kr.ntp.org.cn", "sgp.ntp.org.cn" };
@NonNull
private final Context mContext;
@@ -171,6 +172,14 @@ public class NtpTrustedTime implements TrustedTime {
client.getNtpTime(), client.getNtpTimeReference(), ntpCertainty);
return true;
} else {
+ for(int j = 0; j < bak_ntpservers.length; j++){
+ if(client.requestTime(bak_ntpservers[j], timeoutMillis, network)){
+ long ntpCertainty_bak = client.getRoundTripTime() / 2;
+ mTimeResult = new TimeResult(
+ client.getNtpTime(), client.getNtpTimeReference(), ntpCertainty_bak);
+ return true;
+ }
+ }
return false;
}
}