Mam aplikację z powiadomieniami, które otwierają określoną aktywność, jeśli je kliknę. Chcę, aby jeśli kliknę powiadomienie, a działanie jest już otwarte, nie zostanie uruchomione ponownie, ale po prostu przeniesione na wierzch.
Myślałem, że mogę to zrobić z flagą FLAG_ACTIVITY_BROUGHT_TO_FRONT
lub FLAG_ACTIVITY_REORDER_TO_FRONT
, ale wciąż ją otwiera, więc mam aktywność dwukrotnie.
To jest mój kod:
event_notification = new Notification(R.drawable.icon,
mContext.getString(R.string.event_notif_message), System.currentTimeMillis());
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
body, Utils.PA_NOTIFICATIONS_ID);
Czy mogę zarządzać tym za pomocą flag, czy powinienem przechowywać zmienną w SharedPreferences, aby sprawdzić, czy jest otwarta, czy nie?
Dzięki!
android
notifications
android-activity
PX Developer
źródło
źródło
Odpowiedzi:
Musisz ustawić
launchMode
atrybut tego, odActivity
którego zaczynaszsingleTop
. Spowoduje to, że przychodzące intencje zostaną dostarczone do istniejącej instancji, zamiast uruchamiać nową instancję, któraActivity
znajduje się już na szczycie stosu zadania.Odbywa się to w manifeście przez dodanie
android:launchMode="singleTop"
do<activity>
elementu. Aby uzyskać dostęp do najnowszej intencji (jeśli interesują Cię jakiekolwiek dane, które mogły z nią przejść), nadpiszonNewIntent()
w plikuActivity
.źródło
Spróbuj
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
zamiast tego ustawić flagi na .Z dokumentacji dla FLAG_ACTIVITY_CLEAR_TOP (moje wyróżnienie ):
źródło
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)
.Posługiwać się
onNewIntent()
do obsługi nowych danych z powiadomienia, kliknij i odśwież aktywność.W
onNewIntent
uzyskaniu nowych danych z nowej intencji (której służyło nowe powiadomienie) i złapaniu ich np .:title = intent.getStringExtra("title")
w
onCreate
poprzednio :)Odświeży obecną aktywność nowymi danymi powiadomień.
Możesz również skorzystać z tego samouczka.
źródło
Po prostu skopiuj kod i wklej go w swojej głównej aktywności programu uruchamiającego.
Oto oryginalna odpowiedź
źródło
Myślę, że powinieneś dodać trochę logiki, aby to działało, może to pomoże:
Na przykład mam ekran powitalny (Launcher i MAIN) aplikacji:
W mojej usłudze FirebaseService wykonałem następujące czynności:
źródło
źródło