編集: この問題と考えられる解決策をテストするサンプル アプリケーションを作成しました。ここに私の発見があります:
エクストラを含む通知からアプリを起動し、後で最近のタスクのリストからアプリを選択してアプリに戻った場合、Android は通知から起動されたのと同じ方法で (つまり、エクストラを使用して) アプリを再度起動します。これは、誰に尋ねるかによって、バグまたは機能のいずれかです。
この状況に対処するには、追加のコードを追加する必要があります。私は2つの提案を提供できます:
1.使用FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
通知を作成するときに、 にフラグIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
を設定しますIntent
。次に、ユーザーが通知を選択し、通知からアプリを起動すると、最近のタスクのリストにこのタスクのエントリが作成されません。また、このアプリケーションの最近のタスクのリストにエントリがあった場合、そのエントリも削除されます。この場合、ユーザーは最近のタスクのリストからこのタスクに戻ることができなくなります。これにより、ユーザーが最近のタスクのリストからアプリを起動する可能性がなくなります (ただし、アプリが通知から起動された場合のみ)。
2.検出するFLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
ユーザーが最近のタスクのリストからアプリを起動すると、Android は起動アクティビティの に渡されるフラグIntent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
を設定します。このフラグの存在を検出すると、通知からではなく、最近のタスク リストからアプリが起動されたことがわかります。この場合、エクストラにまだデータが含まれているという事実を無視することができます。Intent
onCreate()
onCreate()
Intent
アプリケーションのワークフローに最適なソリューションを選択してください。そして、質問をありがとう、これは解決するための興味深い課題でした:-)
追加情報:
PendingIntent
を間違って作成しています。あなたが呼んでいます
PendingIntent contentIntent = PendingIntent.getActivity(this,
TripLoggerConstants.PENDING_TRIPS_NOTIFICATION_ID,
new Intent(this, MainActivity.class).putExtra("is_log", true),
Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent.FLAG_ACTIVITY_CLEAR_TOP
に 4 番目のパラメータとして渡していますgetActivity()
。ただし、そのパラメーターはPendingIntent
フラグである必要があります。に設定FLAG_ACTIVITY_CLEAR_TOP
する場合は、次のIntent
ようにする必要があります。
PendingIntent contentIntent = PendingIntent.getActivity(this,
TripLoggerConstants.PENDING_TRIPS_NOTIFICATION_ID,
new Intent(this, MainActivity.class).putExtra("is_log", true)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP), 0);