開始アクティビティのようにトリガーされるアクティビティ A があります。
oncreate では、一部のデータが欠落している場合、アクティビティ A は startactivity を使用して新しいアクティビティ B を作成します。その後、finish() も呼び出します。このようにして、アクティビティ B のみが含まれるバックスタックを取得します。
ここまでは順調ですね。
ここで、アクティビティ B でいくつかのタスクが完了すると、startactivity(activityA) が呼び出され、その後自分自身で finish() が呼び出されます。また、いくつかのエクストラを渡し、アクティビティ A はそれらを問題なく読み取ります。
private void goToA(){
Intent goHome= new Intent(this, A.class);
goHome.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
goHome.putExtra("test", "test 1");
startActivity(goHome);
finish();
}
これで、アクティビティ A だけで形成されたバックスタックができました。実際、「戻る」を押すと、ランチャーに戻ります。
さて、アクティビティ A で、操作中に保留中のインテントを含む通知を作成します。インテントは、新しいエクストラ値を使用してアクティビティ A 自体を呼び出しますが、以前にアクティビティ B から渡された同じパラメーターを使用します。
Intent notifyIntent= new Intent(MyApplication.getAppContext(), A.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
notifyIntent.putExtra("test", "test 2");
PendingIntent intentHome= PendingIntent.getActivity(MyApplication.getAppContext(),2,notifyIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Notification notificationToSend= new Notification(R.drawable.icon_notification, "Tracciamento avviato", System.currentTimeMillis());
notificationToSend.setLatestEventInfo(MyApplication.getAppContext(), "Tracciamento sgàget!","Seleziona per tornare al tracciamento", intentHome);
notificationToSend.flags |= Notification.DEFAULT_SOUND;
notificationToSend.flags |= Notification.FLAG_NO_CLEAR;
ここで、ランチャーに戻り、通知領域を開いて通知をタップすると、期待どおりアクティビティ A に戻りますが、onResume でエクストラを読むと、アクティビティ B によって渡されたものを取得します ("テスト 1")!
これは一般的な「pendingintent を適切に更新する」問題ではないと思います。最初の startactivity には pendingintent がまったく含まれていないためです。なにか提案を?