Androidの時計をNTPで合わせてみる

Android端末をWifiで運用していると時計が自動的に合わないのでいろいろいじってみた。

(追記) 2010/5/15にNTPクライアントアプリ (http://amip.tools-for.net/android/ClockSync) が出てたので、今ならこれを使うのが良いと思う。

背景

Nexus One(Android携帯)の時刻同期のしくみ http://blog.takuo.jp/2010/03/nexus-oneandroid-phones-time-sync.html にある通り、Android端末は適切なSIM(日本ではドコモのみ)を使っている場合は自動で時刻同期をするが、他のSIMやSIM無しで運用している場合には時刻同期がなされない。

SIMを挿しているメイン機はともかく、ヒトバシラーの人たちはたくさんのAndroid端末を持っているものなので、何とかしてみたいと思った。

SNTPクライアント

まずはNTPクライアントを探してみた。

AndroLib.comにSNTP CLIENT http://jp.androlib.com/android.application.net-larko-android-sntpclient-xxwj.aspx があったので入れてみた。

SNTP CLIENTはNTPサーバからの時刻情報を表示するものの、機器の時計を合わせる機能がまだ実装されていない。

adjust_clock

SNTP CLIENTの作者のページにて、adjust_clock http://www.larko.net/adjust_clock を用いた時刻設定の仕方が紹介されている。

$ adb push adjust_clock /data/local/
$ adb shell chmod 755 /data/local/adjust_clock

ここでSNTP CLIENTの画面を見て、Local Offsetの値を1000倍した数値を覚えておく。

$ adb shell "/data/local/adjust_clock -67990 ; echo $?"
0

0が表示されたら成功。SNTP CLIENTの画面でも時刻が正しくなる。

なお、数m〜数十msecぐらいの誤差は残るので、あまり神経質にならない方が良いと思う。

感想

adjust_clockの処理が自動で行われなければあまり意味が無いと思う。
SNTP CLIENTがLocal Offsetをテキストで返してくれれば連動できそうなのだけれど。

ntpdateとかを動かした方が早いかもしれない。