回顧録ばかりでは、なかなか話が進まないので、開発中の気がついたことなどはその場であげていくようにしてみます。
で、今回はごく最近気がついたことについてです。
今まで使っていた携帯電話というのが、時刻あわせが不要で、3G回線を使って携帯が勝手に秒まであわせてくれていました。気持ち誤差はあるものの、1秒以上ずれているということはあまり記憶にありません。
これがそもそも重大な盲点の見過ごしの原因です。
数日前、アプリを開発しながらテレビをふと見てみると、ちょうど次の番組が始まる瞬間でした。つまり18時00分丁度でした。そのタイミングで、開発中のアプリを見てみると、表示されているのは
17時59分56秒
??
??
まあ、地デジだから、秒は正確ではないしなぁ・・・・・と一瞬現実逃避をしましたが、地デジのズレといったって、4秒もずれることは無いはず・・・・。
一瞬なんのこっちゃ?と思いましたが、次の瞬間
”これ、ひょっとして秒をあわせてくれてないのか?”
と現実の戻ってきて、すぐに調べてみました。結果として
”3G回線で一応自動更新はされるが、秒単位の誤差はある”
というもののようです。で、これだけならば、端末で手動で00秒あわせを行えばよいのですが、いくら調べても秒あわせまでは正攻法ではできない模様。裏技はあるけど、それではアプリとして成り立たないしなぁ・・・・。
さらに調べていくと
”この4秒の誤差はメーカーの仕様によるもので、他メーカーのものはこの誤差の量が違う”
ということが判明!これは尋常ではない問題になりました。
そもそも、なぜこんなに00秒にこだわるかというと、私が開発中のアプリが”ラリー”という競技に使うコンピューターの代用品を目指しているもので、ラリーでは00秒のズレは結構問題になる場合があります。よって、これが解決できない場合は、”ラリーコンピューターもどき”で終わってしまいます。
ここで、解決案1としてまず浮かんだのが、
GPSによる時刻取得
すぐに試作してみました。すると、時刻は無事取得できました。これならば、どの端末でも同じ時間で管理することができます。ただしこの場合には問題点があります。
【GPSが受信できない場合は、時計が止まる】
GPSの時刻から端末のシステム時計を調整すればいいじゃん!と思うかもしれませんが、Androidのシステム時計は、アプリ側からは修正できないようになっています、正攻法では・・・。裏技をプログラムに組むことも考えましたが、これではアプリ利用者に迷惑がかかる場合があるので、却下。つまりGPSでの時刻取得は保留としました。
で、誤差がバラバラで、端末自体では秒合わせができない(できる端末があるかもしれませんが)、この状況で考えた苦肉の策が、
”時計を独自で走らせてそいつの誤差を与える”
今までの時計は、Androidのプログラムに実装されている”DigitalClock"をそのまま表示していました。この方がプログラムが単純になるためです。ただし、この”DigitalClock"は、システム時計をそのまま表示するだけのため、修正等はできません。そこで、これとは別系統の時計を内部で作って、自由に誤差を増減できるようにしました。
これにより、端末ごとに異なる秒のズレは一応解決できました。またNTTの時報ともぴったり合ってます。端末で時刻の自動更新をしている場合、ある時点からまた秒のズレが生じてしまいますが、ラリー開始時に自動更新をオフにしてから誤差を修正してあげれば問題にはならないかな?と思います。
また、この方式にすれば、もし大会公式時計がNTTの時報や電波時計と1秒単位でずれていた場合、
大会公式時計に合わせることができますので、融通は利くかな?とも考えています。大会公式時計が必ずしも正確といえる場面ばかりではありませんので。
ということで、一瞬
終わった・・・
と思った問題もとりあえず最悪の事態は脱したかな?と思いつつ、何事も
思い込みは致命傷になりかねない
ということを改めて実感いたしました。
0 件のコメント:
コメントを投稿