GCM から複数のメッセージを受信しています。アプリがフォアグラウンドまたはバックグラウンドで実行されている場合、ブロードキャスト レシーバーを使用しているため、問題はありません。しかし、アプリが実行されていないときは、メッセージを pendingIntent のキューに入れ、通知マネージャーの通知の一部として保持したいと思います。ユーザーが通知をクリックすると、mainActivity が起動され、すべてのメッセージが渡されます。以下にコードを掲載しました。
現在のコードでは、アクティビティの onCreate メソッドで、1 つのメッセージのみを受け取ることができます。これが最新のメッセージです。
要件を要約すると
- アプリケーションが実行されていません。アプリが終了しました。
- Extra Field がメッセージに設定された新しいメッセージを受信するたびに、 pendingIntents を使用して通知を呼び出します。
- 通知バーに通知メッセージが 1 つだけ表示されます (通知バーに「受信メッセージ数 3」が表示されていると仮定します)
- ユーザーが通知をクリックするようになりました
- アプリケーションは pendingIntent にアクセスして、3 つのメッセージすべてを読み取ることができる必要があります。
助けが見つかることを願っています!
// build intent
final Intent notificationIntent = new Intent(context,
MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP);
notificationIntent.putExtra(CommonUtilities.EXTRA_MESSAGE, message);
notificationIntent.setAction("DUMMY");
// pending intent creation
int requestID = (int) System.currentTimeMillis();
// set intent so it does not start a new activity
final PendingIntent intent = PendingIntent.getActivity(context, requestID ,
notificationIntent, 0);
// create notification using intent
final String title = context.getString(R.string.app_name);
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle(title)
.setContentText(formattedMessage)
.setSmallIcon(icon)
.setDefaults(Notification.FLAG_AUTO_CANCEL|Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)
.setContentIntent(intent).build();
final NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1, notification);
//Now in mainActivity:OnCreate
//Receive
Bundle extras = getIntent().getExtras();
if (extras != null) {
String inp = extras.getString(CommonUtilities.EXTRA_MESSAGE);
if (inp != null ) {
doSomething(inp);
}
}