« 2012年1月 | トップページ | 2012年3月 »

ACTION_DATE_CHANGEDは使えない?

WindowsとWindowsMobile用に作った日CAL之助をAndroidに移植する作業をしている。
このアプリはホーム画面上のアプリウィジェットで日付を表示し、これをタッチするとカレンダーが起動するようになっている。当然だが、日付が変わったタイミングでウィジェットの表示を更新する必要がある。

幸いなことにAndroidには日付が変わったらACTION_DATE_CHANGEDというメッセージを飛ばしてくれる仕組みがあるので、それを受信したタイミングで表示を更新すれば良い。と普通は考える。

移植作業に取り掛かった当初、当然のようにこのACTION_DATE_CHANGEDで更新するようにした。
エミュレーターのホーム画面にウィジェットを貼っておいて、時刻を23時58分にセットすれば約2分後には更新されるはず。そう思っていた。しかし0時になって日付が変わってもウィジェットの表示が更新されない。何度やってもう駄目だった。
仕方が無いのでAlarmManagerを使って更新する方法をとっていた。

しかし、どうも釈然としない。何処か間違えていたのではないかとも思えてきた。
そこで再度ACTION_DATE_CHANGEDで更新するように変えてエミュレーターで動かしてみたところ今度は正常に動作した。次に実機に入れて、時刻を弄ったりはせず実運用の形態で様子を見る。すると深夜0時になるとちゃんと更新された。だが1回だけでは安心できない。翌日も深夜0時になるとちゃんと更新された。
やはり最初のは何処か間違えていたのだろうと思った。しかし念のためもう1日様子を見ることにした。そして翌日の深夜。なんと0時を過ぎても更新されない。数分待ってもいっこうに変わらない。勿論この間は連続運用であってコードに一切変更はない。

エミュレーターに戻ってログを見るとACTION_DATE_CHANGEDが来なくなっていた。と言うか時刻を23時58分とかにセットして設定ボタンをクリックしたタイミングでACTION_DATE_CHANGEDが来ていた。
どうもAndroidのバグのような気がしてならない。もっともAndroidアプリの開発は始めて間もないので確かなことは言えないが、何れにせよ来るべき時に来たり来なかったりでは使えない。結局AlarmManagerで対処することに落ち着いた。

| | コメント (0) | トラックバック (0)

« 2012年1月 | トップページ | 2012年3月 »