PendingIntent dalla notifica e la domanda conflitti di storia
-
23-09-2019 - |
Domanda
Sto creando una notifica con qualcosa di simile a quanto segue:
Intent ni = new Intent(this, SomeActivity.class);
ni.putExtra("somestring", "somedata");
PendingIntent contentIntent =
PendingIntent.getActivity(this, 0, ni,
PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_ONE_SHOT);
Context context = getApplicationContext();
notification.setLatestEventInfo(context,
res.getString(R.string.app_name),
text, contentIntent);
La chiave qui sono i dati extra sul Intenti per la notifica. Una volta che clicco sulla notifica e la porta in su SomeActivity, che porta in primo piano l'attività ed i dati supplementare è disponibile.
Tuttavia, se esco l'applicazione, tenere premuto il tasto home fino a quando l'elenco attività recenti si avvicina, e scegliere di aprire l'applicazione di nuovo, i dati in eccesso è ancora passata. C'è un modo per rendere questi dati viene passato solo se l'applicazione viene aperta tramite la notifica, e non dalla lista attività recenti?
Soluzione
Sembra che posso controllare per vedere se l'attività è stata lanciata dalle recenti attività di dialogo con questo:
if((getIntent().getFlags() &
Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
// ignore extras
}
else {
// do not ignore extras
}
Non so se questo è il modo migliore, ma funziona.
Altri suggerimenti
Usa un Intent
diverso. Ad esempio, è possibile aggiungere un <intent-filter>
per qualche stringa un'azione personalizzata, e l'uso che per la vostra Notification
PendingIntent
-based. In altre parole, non è possibile modificare la finestra di attività più-recente, ma è possibile modificare la parte del conflitto.
Prova con:
int NOTIFICATION_CODE = 1;
PendingIntent contentIntent =
PendingIntent.getActivity(this,
NOTIFICATION_CODE,
ni,
PendingIntent.FLAG_UPDATE_CURRENT |
PendingIntent.FLAG_ONE_SHOT
);
Modifica valore NOTIFICATION_CODE per ogni notifica.