複数のノーティフィケーションに異なる動作をさせるには

2,394 views
Skip to first unread message

snow69it

unread,
Dec 26, 2012, 7:44:45 AM12/26/12
to 日本Androidの会
こんにちはsnow69itと申します。

ノーティフィケーションを使って下記のような動作を作りたいのですが、うまくいかず丸1日はまってしまっています。
やり方をご存知の方がいましたら助言頂けますでしょうか。

1.プッシュ通知を受け取り、ステータスバーにノーティフィケーションを表示させる。
 (このプッシュ通知は通知毎に固有のIDを持ってます。)

2.1を複数回繰り返しステータスバーをプルダウンしたときに複数のノーティフィケーションが表示される。

3.ノーティフィケーションをタップして、アクティビティを起動。
 ことのきプッシュ通知からもらった通知IDを元に動作を変化させる。

●ハマりポイントとしては3で使用するIDをどう渡すか、です。
下記のようにPendingIntentを取得しています。

Intent intent = new Intent(this, MyActivity.class);
intent.putExtra( "key", 通知ID );
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);

単一のノーティフィケーションではMyActivityに意図した通知IDが渡るのですが、
2つめ以降にMyActivityに渡される通知IDは
 ・1つめの通知ID
もしくは
 ・最後に送られた通知ID
となってしまいます。

※1つめか最後かはPendingIntent.getActivityの第4引数によって異なります。

●1つのアプリで複数のノーティフィケーションを表示するものを見たことがなかったので
もしやできないのではとも思いましたが、gmailアプリでは実現されています。
例えば、2つアカウントを登録してメールを受信すると各アカウント毎に2つ
ノーティフィケーションが表示されタップするとそれぞれのアカウントの受信ボックスが
表示されます。


年の暮れで皆様お忙しとは思いますがよろしくお願いします。

Hirokazu Fukami

unread,
Dec 26, 2012, 7:54:40 AM12/26/12
to android-g...@googlegroups.com
こんばんはfkmです。

手元で試した訳ではないですが、
NotificationManager.notify(id, Notification)で登録する際、idはNotification毎に別にしていますか?
既にidが登録済みの場合は上書きだった気がします。。。

http://developer.android.com/reference/android/app/NotificationManager.html#notify%28int,%20android.app.Notification%29


2012/12/26 snow69it <raix...@gmail.com>:
> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>



--
-------------------------------------------------------------
深見 浩和(Hirokazu Fukami)

URI:http://www.fkmsoft.jp
email: f...@fkmsoft.jp

snow69it

unread,
Dec 26, 2012, 9:07:59 PM12/26/12
to 日本Androidの会
ご返信ありがとうございます。

NotificationのIDは別にしているのでステータスバーをプルダウンしたときに複数のノーティフィケーションを表示させることには成功してい
ます。
それぞれのノーティフィケーションに異なる動作(PendingIntentに持たせたIntentインスタンス)を仕込むことができてない状態で
す。

ハマりポイントで書いたPendingIntentの動作もノーティフィケーションを1つしか表示しない場合なら納得できるのですが、複数表示させた場
合にはどう使えばよいのか、解せない仕様です。

PendingIntentのインスタンスを取得するのに普通のコンストラクタはprivateだし、メソッド名もgetActivityなのでアプリ
のコンテキストに依存してそうな気がしています。

gmailのアカウント毎のノーティフィケーションの動作はこのあたりからそもそも違うのでしょうか。。。

補足:
作ろうとしているのはメールアプリをイメージして頂けると近いものがあります。
新着メールのノーティフィケーションがいくつも並んで、タップすると対応するメールを開封するところまでやりたいのです。
回避案としてはNotificationのIDを一定にして「n件の新着があります」というふうに1つのノーティフィケーションにまとめてしまう方法で
す。
この場合メールを指定できないので開封はできず、一覧画面を表示するにとどまります。

kacodama

unread,
Dec 26, 2012, 9:18:24 PM12/26/12
to android-g...@googlegroups.com
こちらはウィジェットでの記事になりますが、同じPendingIntentとputExtraについて
の記事のようですので、参考になりませんか?



2012年12月26日水曜日 21時44分45秒 UTC+9 snow69it:

noxi

unread,
Dec 26, 2012, 9:13:28 PM12/26/12
to android-g...@googlegroups.com
noxiです。

PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
これの第二引数をそれぞれ別の値にすることで解消できませんか?


2012年12月27日 11:07 snow69it <raix...@gmail.com>:

snow69it

unread,
Dec 27, 2012, 5:44:58 AM12/27/12
to 日本Androidの会
noxiさん、kacodamaさん

ご返信ありがとうございます。

ご指摘の内容でうまくいきました!
リファレンスにcurrently not usedとあったので第二引数は見落としていました。
あんざい先生にも感謝です。

それではよいお年を。

ありがとうございました。


On 12月27日, 午前11:13, noxi <android.weather...@gmail.com> wrote:
> noxiです。
>
> PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
> これの第二引数をそれぞれ別の値にすることで解消できませんか?
>
> 2012年12月27日 11:07 snow69it <raix5...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages