1

GCM から複数のメッセージを受信して​​います。アプリがフォアグラウンドまたはバックグラウンドで実行されている場合、ブロードキャスト レシーバーを使用しているため、問題はありません。しかし、アプリが実行されていないときは、メッセージを pendingIntent のキューに入れ、通知マネージャーの通知の一部として保持したいと思います。ユーザーが通知をクリックすると、mainActivity が起動され、すべてのメッセージが渡されます。以下にコードを掲載しました。

現在のコードでは、アクティビティの onCreate メソッドで、1 つのメッセージのみを受け取ることができます。これが最新のメッセージです。

要件を要約すると

  1. アプリケーションが実行されていません。アプリが終了しました。
  2. Extra Field がメッセージに設定された新しいメッセージを受信するたびに、 pendingIntents を使用して通知を呼び出します。
  3. 通知バーに通知メッセージが 1 つだけ表示されます (通知バーに「受信メッセージ数 3」が表示されていると仮定します)
  4. ユーザーが通知をクリックするようになりました
  5. アプリケーションは 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);
    }
}
4

2 に答える 2

0

GCM 着信メッセージを受信するのはあなたであり、Notification.ユーザーが をタップすると、これらすべての詳細が表示されますNotification

于 2013-01-25T20:57:23.820 に答える
0

みんな最終的に私は私の問題を解決するために次のロジックを使用しました

Intent を受け取るときにローカル配列を持っています。

保留中のインテントが既に存在する場合 ( FLAG_NO_CREATE )、配列に新しいメッセージを追加し、保留中のインテントを更新します。このようにして、EXTRA は配列に古いメッセージと新しいメッセージを持ちます。それ以外の場合、通知は既にクリアされているため、古いメッセージ配列をクリアします。( FLAG_UPDATE CURRENT) End で新しい EXTRA を追加します。

次に通知

ユーザーが単一の通知をクリックすると、新しいアクティビティが開始されます。

MainActivity Oncreate では、インテント データを読み取り、ループに入り、アプリが実行されていないときに見逃していたであろうすべてのメッセージを取得します。

もちろん、ユーザーが通知を長時間クリックしないと、通知バーがどれほど重くなるかはわかりません。

于 2013-01-26T07:05:40.447 に答える