Skip to content

Instantly share code, notes, and snippets.

@573
Forked from xujiaao/android-set-ntp-server.md
Created March 15, 2024 20:47
Show Gist options
  • Save 573/1bdbe294a85626f6787c465892377328 to your computer and use it in GitHub Desktop.
Save 573/1bdbe294a85626f6787c465892377328 to your computer and use it in GitHub Desktop.
Set the NTP server of your android device
tags
Android
Android Things

Set the NTP server of your android device

Just use this command to set a server address to automatically sync your device time. ( ͡° ͜ʖ ͡°)✧

$ adb shell settings put global ntp_server <new-ntp-server>

Background

I have a Raspberry Pi 3 with Android Things installed on it. But the time is never synchronized...

After googling it, I found this piece of code in NtpTrustedTime.java

public class NtpTrustedTime implements TrustedTime {
    ...
    public static synchronized NtpTrustedTime getInstance(Context context) {
        if (sSingleton == null) {
            final Resources res = context.getResources();
            final ContentResolver resolver = context.getContentResolver();
            final String defaultServer = res.getString(
                    com.android.internal.R.string.config_ntpServer);
            final long defaultTimeout = res.getInteger(
                    com.android.internal.R.integer.config_ntpTimeout);
            final String secureServer = Settings.Global.getString(
                    resolver, Settings.Global.NTP_SERVER);
            final long timeout = Settings.Global.getLong(
                    resolver, Settings.Global.NTP_TIMEOUT, defaultTimeout);
            final String server = secureServer != null ? secureServer : defaultServer;
            sSingleton = new NtpTrustedTime(server, timeout);
            sContext = context;
        }
        return sSingleton;
    }
}

It shows that android tring to get NTP server from:

  1. Settings.Global.NTP_SERVER first

  2. Then com.android.internal.R.string.config_ntpServer

And the NTP server of my Android Things is time.android.com, that's why it dose not work (I'm in China...).


Fortunately, it is easy to set settings via adb:

$ adb shell settings put global ntp_server asia.pool.ntp.org

# test
$ adb shell settings get global ntp_server 
> asia.pool.ntp.org

🎉 CHEERS

@573
Copy link
Author

573 commented Mar 15, 2024

See upstream comments for more tips.

Powershell: > adb shell settings list global | select-string -pattern 'ntp'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment