AlarmManagerに異なるintentと認識させる方法

By 山田
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

AlarmManagerを使っていて、こんな経験はありませんか?

Pending Intentに入れるintentの設定で、遷移先のクラスは一緒で、intentに設定するデータが異なる予定を別々にセットしたい!

たとえば、普通に以下のように設定しようとすると、AlarmManagerでは同じintentとして見なされてしまう為、古いintentが上書きされてしまいます。

これを実行すると、20分後にcontentIntent02で設定したintentが処理されるはずです。つまり、同じintentだとみなされ、AlarmManagerが設定を上書きしてしまうんです。
これを見た時、「あー、PendingIntent.FLAG_UPDATE_CURRENTをセットしているから上書きされてしまうんやなかろうか?」とも思ったんですが、このフラグを0にしても、結果は変わりませんでした。

設定を上書きしたい時(目覚ましの時間変更など)ではこの実装で便利なのですが、
時間差で、同じActivityを異なるデータを渡して起動させたい場合には困ります。
そこで、以下のようにすると、予定の上書きを回避できます。

ダミーのパラメータを付与してあげる事によって、AlarmManagerでは別のintentだ、と見なされ、上書きを回避できます。
AlarmManagerに限らず、Androidのソースは公開されているので、それらを読んでみると、意外な発見があるかもしれません。

関連する投稿