2013-04-08 6 views
6

Stworzyłem prostą aplikację z przyciskiem. Kliknięcie go uruchamia powiadomienie, a kliknięcie powiadomienia powoduje uruchomienie nowej instancji tej samej aplikacji. Chciałem jednak, aby kliknięcie powiadomienia spowodowało powrót do instancji aplikacji, z której wywołano powiadomienie. Do tego konsultowany Android docs dla FLAG_ACTIVITY_NEW_TASK FLAGAndroid - użycie FLAG_ACTIVITY_NEW_TASK

Przy użyciu tej flagi, jeśli zadanie jest już uruchomiony dla aktywności jesteś teraz wyjściowej, a następnie nowa działalność nie zostanie rozpoczęty; zamiast tego bieżące zadanie zostanie po prostu przeniesione na początek ekranu w stanie, w którym było ostatnie. Zobacz FLAG_ACTIVITY_MULTIPLE_TASK dla flagi, aby wyłączyć to zachowanie.

Na tej podstawie podczas tworzenia intencji przekazywania do PendingIntent ustawiam tę flagę. Jednak kliknięcie powiadomienia nadal uruchamia nową instancję aplikacji.

Co robię źle?

+0

Czy "Czynność", którą uruchamiasz już rozpoczęła się w twojej aplikacji (kiedy naciśniesz powiadomienie), czy zaczynasz inną "Aktywność" w swojej aplikacji? –

+0

@StevenByle: nie jest to ta sama aktywność, którą chcę uruchomić - ta, która jest uruchomiona i która spowodowała powiadomienie. – Cygnus

+0

Hmmm może zamieścić swój kod "Intent" ... może jest to coś prostego, czego nam brakuje ... –

Odpowiedz

4

Należy pamiętać, że po kliknięciu przycisku Notification jest to od tego Context, że zamiar jest uruchomiony. Ten kontekst nie ma aktywności w jej zadaniu (infact, będzie to puste zadanie).

Wynikiem tego jest uruchomiona wersja tej samej Activity (chociaż wciąż tylko jedna instancja z was Application). Każdy Activity używa innego Task.

Jeśli nie potrzebujemy duplikatów działań tego samego typu w dowolnych stosach można użyć odpowiedź tutaj:

https://stackoverflow.com/a/2327027/726954

W przeciwnym razie, istnieje wiele sposobów, aby „naprawić” ten problem, w tym zmienne singleton i metody kontekstu aplikacji, które śledzą, które działania są w stanie działania.

Może być konieczne wyszukanie i sprecyzowanie pytania dla nich.

+0

Ok..but kiedy tworzymy PendingIntent określamy kontekst, w którym rozpoczniemy działanie jako pierwszy argument getActivity(). Więc czy nie należy go rozpocząć zgodnie z tym kontekstem? A może czegoś brakuje? – Cygnus

+0

Ponadto, jeśli dokumenty mówią "jeśli zadanie jest już uruchomione dla działania, które właśnie rozpoczynasz, wtedy nowe działanie nie zostanie uruchomione", to czy w tym przypadku nie działa zadanie dla tego działania? – Cygnus

+0

Czy trochę czytania na 'zadania'. Oto Dokumentacja na temat getActivity - http://developer.android.com/reference/android/app/PendingIntent.html#getActivity(android.content.Context, int, android.content.Intent, int) - mówi "Uwaga że aktywność zostanie uruchomiona poza kontekstem istniejącej aktywności " – Graeme

1

Zadanie w Androidzie jest osobnym przepływem pracy użytkownika. Jeśli kiedyś zobaczysz ekran główny, zazwyczaj oznacza to, że zaczynasz nowy. Usuń flagę, która powinna działać. jeśli nie, spróbuj użyć Single top.

+0

Umm nie dostałem tego ... po kliknięciu powiadomienia, to samo wystąpienie, które spowodowało moje powiadomienie powinno zjawić się. Jeśli nie ustawię żadnej flagi, zostanie uruchomiona nowa instancja i nie chcę tego .. – Cygnus

+1

Spróbuj użyć pojedynczego topu. To, co chcesz osiągnąć, jest dość trudne - mam w domu kod do tego i mogę go później sprawdzić. – meredrica

+0

@meredrica Doceniłbym wiele spostrzeżeń, aby rozwiązać podobny problem. Skończyłem używać manifestu 'android: launchMode =" singleTop "', ale uniemożliwia to aplikacji historię wsteczną, tj. Ponownie przetwarzam motyw preferencji zmieniający działanie w locie. Dzięki. – dentex