January 12, 2012

K-9 Mail UnreadCountのネタばらし。

Androidアプリで、K-9 Mail UnreadCountというアプリを作って公開しています。
https://market.android.com/details?id=net.madroom.k9uc

このアプリ、メール受信時に、unread表示数が増えます。
K-9 Mailに複数アカウントを設定している場合は、合計unread数を表示します。

対して、unread数が減るタイミングなのですが、未読が既読になった瞬間。
ではありません。

通知領域から新着メールを開いて、home画面に戻っても、unread数は減りません。
でも、WidgetからK-9 Mailを起動して、新着メールを開くと、unread数は減ります。

この挙動について、簡単に、書いておきます。

メール受信のタイミングは、BroadcastReceiverでキャッチできます。
でも、未読が既読になった時は、無理でした。
contentObserverでも、無理でした。
もちろん、本当は出来るのだけど、僕の調査不足。という可能性もあります。

では何故、WidgetからK-9 Mailを起動して、新着メールを開くとunread数が減るのか。
となりますが、実はWidgetタップ時はK-9 Mailを起動していません。
透明Activityを起動しています。
そして、透明Activityが自動的に、K-9 Mailを起動しています。
webのredirectみたいな感じです。

こうすることで、K-9 Mailを終了した時、透明ActivityのonRestart()が呼ばれます。
onRestart()は即座にfinish()して、onDestroy()でunread数の再取得、Widgetの更新。
という実装になっています。
https://github.com/mp-android/K9MailUnreadCount

Activityのライフサイクルを、うまく使えたかなー。みたいな感じのアプリです。
でも、いつか、通知領域から開いても、ちゃんと更新されるようにしたいものです。

開発の経緯は、Gmail公式アプリが外部アプリのアクセスを遮断して頭に来たから。
ですかね。。。

No comments:

Post a Comment