1

私は2つ持っていNotificationsます:1つは着信メッセージ用、もう1つは発信メッセージ用です。Notificationクリックすると、それは自分自身に送信しますPendingIntentNotificationsどれがクリックされたかを判断するために、追加の値を入力しました。

private static final int INID = 2;
private static final int OUTID = 1;

private void update(boolean incoming, String title, String message, int number) {
    notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
    Intent intent = new Intent(this, Entry.class);
    intent.putExtra((incoming ? "IN" : "OUT"), incoming);
    PendingIntent pi = PendingIntent.getActivity(Entry.this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
    Notification noti = new Notification(incoming ? R.drawable.next : R.drawable.prev, incoming ? "Incoming message" : "Outgoing message", System.currentTimeMillis());
    noti.flags |= Notification.FLAG_NO_CLEAR;
    noti.setLatestEventInfo(this, title, message, pi);
    noti.number = number;
    notificationManager.notify(incoming ? INID : OUTID, noti); 
}

そしてIntentonNewIntentメソッドでをキャプチャします。

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
    if (intent.getExtras() != null) 
        for (String id : new ArrayList<String>(intent.getExtras().keySet())) {
            Object v = intent.getExtras().get(id);
            System.out.println(id + ": " + v);
        }
    else
        log("onNewIntent has no EXTRAS");
}

さらに、 (タグmanifest内の)タスクが1つだけであることを確認する行:activity

android:launchMode="singleTop" 

メソッドを実行することをログに記録しましたonNewIntentが、常に同じものを使用しintentます(つまり、INまたはOUTのいずれかをクリックするnotificationと、インテントエクストラには常に同じものが含まれますbundle(ログ:) OUT: false)。両方のインテントの初期化は、変更されたときとは別のシーケンスで行われるため、常に最後に作成されたインテントであることがわかりました。

private void buttonClick(View v) {      
    update(true, "IN", "in", 1);
    update(false, "OUT", "out", 3);
}

private void setNotificationSettings() {
    update(false, "IN", "===out message===", 0);
    update(true, "OUT", "===in message===", 0);
}

なぜ私はいつも同じ(最後に作成された)を受け取るのIntentですか?

4

1 に答える 1

7

requestcode毎回最後のインテントを受け取る理由と同じように、すべてのインテントに同じものを渡しているためrequestcode、保留中のインテントでは異なるものを渡す必要があります..

以下のコードのように

あなたのコード:

 PendingIntent pi = PendingIntent.getActivity(Entry.this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);

変える必要がある:

PendingIntent pi = PendingIntent.getActivity(Entry.this, your_request_code, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
于 2012-12-12T11:11:07.170 に答える