Mogę znaleźć sposób na przesłanie parametrów do mojej aktywności z mojego powiadomienia.
Mam usługę, która tworzy powiadomienie. Gdy użytkownik kliknie powiadomienie, chcę otworzyć moją główną aktywność z pewnymi specjalnymi parametrami. Np. Identyfikator przedmiotu, więc moja aktywność może załadować i przedstawić specjalny widok szczegółów przedmiotu. Mówiąc dokładniej, pobieram plik, a gdy plik jest pobierany, chcę, aby powiadomienie miało taki zamiar, że po kliknięciu otwiera moją aktywność w trybie specjalnym. Próbowałem użyć putExtra
zgodnie z moją intencją, ale nie mogę tego wydobyć, więc myślę, że robię to źle.
Kod z mojej usługi, który tworzy powiadomienie:
// construct the Notification object.
final Notification notif = new Notification(R.drawable.icon, tickerText, System.currentTimeMillis());
final RemoteViews contentView = new RemoteViews(context.getPackageName(), R.layout.custom_notification_layout);
contentView.setImageViewResource(R.id.image, R.drawable.icon);
contentView.setTextViewText(R.id.text, tickerText);
contentView.setProgressBar(R.id.progress,100,0, false);
notif.contentView = contentView;
Intent notificationIntent = new Intent(context, Main.class);
notificationIntent.putExtra("item_id", "1001"); // <-- HERE I PUT THE EXTRA VALUE
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notif.contentIntent = contentIntent;
nm.notify(id, notif);
Kod z mojej aktywności, która próbuje pobrać dodatkowy parametr z powiadomienia:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Bundle extras = getIntent().getExtras();
if(extras != null){
Log.i( "dd","Extra:" + extras.getString("item_id") );
}
Dodatki są zawsze zerowe i nigdy nie dostaję niczego do mojego dziennika.
Przy okazji ... onCreate
jest uruchamiane tylko wtedy, gdy moja aktywność się rozpoczyna, jeśli moja aktywność już się rozpoczęła Chcę również zebrać dodatki i przedstawić moją aktywność zgodnie z otrzymanym item_id.
Jakieś pomysły?
źródło
PendingIntent.getActivity()
z flagąPendingIntent.FLAG_UPDATE_CURRENT
, w przeciwnym razie te same dodatki będą ponownie wykorzystane przy każdym powiadomieniu.PendingIntent.getActivity()
oprócz ustawieńFLAG_ACTIVITY_SINGLE_TOP
naIntent
iFLAG_UPDATE_CURRENT
naPendingIntent
. Zobacz stackoverflow.com/questions/7370324/…Miałem podobny problem, że moja aplikacja wyświetla powiadomienia o wiadomościach. Gdy jest wiele powiadomień i kliknięcie każdego powiadomienia powoduje wyświetlenie tego szczegółu powiadomienia w aktywności wyświetlania wiadomości. Rozwiązałem problem z tymi samymi dodatkowymi parametrami, które są odbierane w celu wyświetlenia wiadomości.
Oto kod, który to naprawił. Kod do utworzenia zamiaru powiadomienia.
Kod do wyświetlenia Wiadomość Aktywność.
źródło
Może trochę późno, ale: zamiast tego:
Użyj tego:
źródło
Spotkaj się z tym samym problemem tutaj. Rozwiązuję go za pomocą innego kodu żądania, używam tego samego identyfikatora jako powiadomienia podczas tworzenia PendingIntent. ale wciąż nie wiem, dlaczego należy to zrobić.
źródło
Po przeczytaniu niektórych list e-mail i innych forów odkryłem, że sztuczka wydaje się dodawać jakieś unikalne dane do intencji.
lubię to:
Nie rozumiem, dlaczego trzeba to zrobić, ma to coś wspólnego z intencją, że nie można go zidentyfikować tylko dzięki dodatkom ...
źródło
Próbowałem wszystkiego, ale nic nie działało.
w końcu wymyślił następujące rozwiązanie.
1- w manifeście dodaj dla działania android: launchMode = "singleTop"
2- wykonując zamierzoną czynność wykonaj następujące czynności, użyj pakunku zamiast bezpośrednio za pomocą intent.putString () lub intent.putInt ()
źródło
AndroidManifest.xml
Uwzględnij launchMode = „singleTop”
SMSReceiver.java
Ustaw flagi dla Intent i PendingIntent
MessageDetailsActivity.java
onResume () - jest wywoływany za każdym razem, ładuje dodatki.
Mam nadzieję, że to pomaga, opierało się na innych odpowiedziach na temat przepełnienia stosu, ale jest to najbardziej zaktualizowana, która działała dla mnie.
źródło
To proste, to moje rozwiązanie z wykorzystaniem przedmiotów!
Moje POJO
Powiadomienie o metodzie
Nowe zajęcie
Powodzenia!!
źródło
Po przeprowadzeniu wyszukiwania dostałem rozwiązanie z Android Developer's Guide
Aby uzyskać dodatkową wartość w klasie Test Activity, musisz napisać następujący kod:
źródło
stackBuilder
?W implementacji powiadomień użyj takiego kodu:
Aby uzyskać dodatkowe wartości Intent w Przykładowej czynności, użyj następującego kodu:
BARDZO WAŻNE: Intent :: putExtra () metoda jest przeciążony jeden. Aby uzyskać dodatkowy klucz, musisz użyć metody Intent :: get [Type] Extra () .
Uwaga: NOTIFICATION_ID i NOTIFICATION_CHANNEL_ID są stałymi zadeklarowanymi w Przykładzie
źródło
Dzień dobry, ja też mogę powiedzieć, że próbowałem wszystkiego wymienionego w tych postach i kilku innych z innych źródeł. Problem nr 1 polegał na tym, że nowy Intent zawsze miał pakiet zerowy. Mój problem polegał na zbyt dużym skupieniu się na szczegółach „czy to. Czy to. Lub.”. Moim rozwiązaniem było wycofanie się od szczegółów i przyjrzenie się ogólnej strukturze powiadomienia. Kiedy to zrobiłem, udało mi się umieścić kluczowe części kodu we właściwej kolejności. Jeśli masz podobne problemy, sprawdź:
// Lubię znacznie lepiej określać typ danych. np. bundle.putInt
W tej sekwencji otrzymuję prawidłowy pakiet.
źródło
Jeśli użyjesz
w pliku AndroidManifest.xml w celu uruchomienia działania należy użyć następujących elementów:
Ważne jest, aby ustawić unikalne dane, np. Używając unikalnego identyfikatora, takiego jak:
źródło
do użytku Usług
PendingIntent.FLAG_UPDATE_CURRENT
dla mnie praca.
źródło
Użyj jako PendingIntent podczas wyświetlania powiadomienia, niż zostanie to rozwiązane.
PendingIntent intent = PendingIntent.getActivity (this, 0, noticeIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Dodaj PendingIntent.FLAG_UPDATE_CURRENT jako ostatnie pole.
źródło