Android修改NTP服务器为windows,使用多个ntp服务器轮询同步时间


diff --git a/frameworks/base/core/java/android/util/NtpTrustedTime.java b/frameworks/base/core/java/android/util/NtpTrustedTime.java
index ed2d3c6..7047645 100644
--- a/frameworks/base/core/java/android/util/NtpTrustedTime.java
+++ b/frameworks/base/core/java/android/util/NtpTrustedTime.java
@@ -39,7 +39,7 @@ public class NtpTrustedTime implements TrustedTime {
     private static NtpTrustedTime sSingleton;
     private static Context sContext;
-    private final String mServer;
+    private String mServer;
     private final long mTimeout;
     private ConnectivityManager mCM;
@@ -48,6 +48,13 @@ public class NtpTrustedTime implements TrustedTime {
     private long mCachedNtpTime;
     private long mCachedNtpElapsedRealtime;
     private long mCachedNtpCertainty;
+       
+       String[] backupNtpServers = new String[]{
+               "tw.pool.ntp.org",
+               "time.nist.gov",
+               "time-a.nist.gov"
+       };
+       int index = -1;
     private NtpTrustedTime(String server, long timeout) {
         if (LOGD) Log.d(TAG, "creating NtpTrustedTime using " + server);
@@ -101,15 +108,28 @@ public class NtpTrustedTime implements TrustedTime {
         if (LOGD) Log.d(TAG, "forceRefresh() from cache miss");
         final SntpClient client = new SntpClient();
-        if (client.requestTime(mServer, (int) mTimeout)) {
-            mHasCache = true;
-            mCachedNtpTime = client.getNtpTime();
-            mCachedNtpElapsedRealtime = client.getNtpTimeReference();
-            mCachedNtpCertainty = client.getRoundTripTime() / 2;
-            return true;
-        } else {
-            return false;
-        }
+               boolean result = false;
+               while(!(result = client.requestTime(mServer, (int)mTimeout)) && index < (backupNtpServers.length-1)){
+               index++;
+               mServer = backupNtpServers[index];
+        }   
+        index = -1;
+               Resources res = sContext.getResources();
+               String defaultServer = res.getString(
+                    com.android.internal.R.string.config_ntpServer);
+               String secureServer = Settings.Global.getString(
+                     sContext.getContentResolver(), Settings.Global.NTP_SERVER);
+
+               mServer  = secureServer != null ? secureServer : defaultServer;
+               
+               if(result){
+                       mHasCache = true;
+                       mCachedNtpTime = client.getNtpTime();
+                       mCachedNtpElapsedRealtime = client.getNtpTimeReference();
+                       mCachedNtpCertainty = client.getRoundTripTime() / 2;
+               }
+            
+               return result;
     }
     @Override
diff --git a/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml
new file mode 100644
index 0000000..ee8306f
--- /dev/null
+++ b/frameworks/base/packages/SettingsProvider/res/values/custom_defaults.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!--use windows ntp server for default-->
+    <string name="def_ntp_server" translatable="false">
+        time.windows.com
+    </string>
+</resources>
diff --git a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/frameworks/base/packages/SettingsProvider/src/com/android/provide
index 11e8e54..b529c2e 100644
--- a/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2575,6 +2575,9 @@ class DatabaseHelper extends SQLiteOpenHelper {
             loadBooleanSetting(stmt, Settings.Global.THEATER_MODE_ON,
                     R.bool.def_theater_mode_on);
+            loadStringSetting(stmt, Settings.Global.NTP_SERVER,
+                    R.string.def_ntp_server);
+
             loadStringSetting(stmt, Settings.Global.AIRPLANE_MODE_RADIOS,
                     R.string.def_airplane_mode_radios);
发布了234 篇原创文章 · 获赞 64 · 访问量 95万+

猜你喜欢

转载自blog.csdn.net/zhoumushui/article/details/101304089