Chcę wiedzieć, czy użytkownik powróci do ekranu głównego, jeśli opuści bieżącą aktywność.
android
android-activity
lifecycle
virsir
źródło
źródło
Odpowiedzi:
AKTUALIZACJA (lipiec 2015):
Od getRunningTasks () się przestarzałe, z API 21 lepiej podążać raukodraug odpowiedź lub Ed Burnette jeden (wolałbym drugi).
Istnieje możliwość sprawdzenia aktualnych zadań i ich stosu za pomocą ActivityManagera .
Aby więc ustalić, czy czynność jest ostatnią:
Użyj poniższego kodu:
Pamiętaj, że powyższy kod będzie ważny tylko wtedy, gdy masz jedno zadanie. Jeśli istnieje taka możliwość, że dla Twojej aplikacji będzie istniała taka liczba zadań - musisz sprawdzić inne elementy taskList . Przeczytaj więcej o zadaniach Zadania i stosie wstecznym
źródło
isTaskRoot()
metodą.Zamierzam zamieścić komentarz @ H9kDroid jako najlepszą odpowiedź dla osób, które mają podobne pytanie.
Możesz użyć isTaskRoot (), aby dowiedzieć się, czy działanie jest katalogiem głównym zadania.
mam nadzieję, że to pomoże
źródło
if (isTaskRoot()) { // do something }
Mam nadzieję, że pomoże to nowym początkującym, Opierając się na powyższych odpowiedziach, które dla mnie działają dobrze, udostępniam również fragment kodu, więc będzie łatwy do wdrożenia.
rozwiązanie: użyłem,
isTaskRoot()
które zwracają wartość true, jeśli bieżąca aktywność jest tylko aktywnością na twoim stosie, a inna niż ja również obsługuję przypadek, w którym jeśli mam jakąś aktywność na stosie, przejdź do ostatniej aktywności na stosie zamiast otwierania nowej niestandardowej.W Twojej działalności
źródło
istnieje najłatwiejsze rozwiązanie tego problemu, możesz użyć isTaskRoot () w swoim działaniu
źródło
Chociaż może istnieć sposób, aby to osiągnąć (zobacz inne odpowiedzi), sugeruję, aby tego nie robić. Zwykłe aplikacje na Androida nie powinny wiedzieć, czy ekran główny ma się wyświetlić, czy nie.
Jeśli próbujesz zapisać dane, umieść kod zapisujący dane w metodzie onPause (). Jeśli próbujesz dać użytkownikowi możliwość zmiany zdania na temat istniejącej aplikacji, możesz przechwycić klawisz w górę / w dół dla klawisza Wstecz i metody onBackPressed () i przedstawić im pytanie „Czy na pewno?” skłonić.
źródło
Jednym ze sposobów śledzenia tego jest dołączenie znacznika podczas rozpoczynania nowej czynności i sprawdzenie, czy znacznik istnieje.
Za każdym razem, gdy zaczynasz nową aktywność, wstaw znacznik:
Możesz to sprawdzić w ten sposób:
źródło
Problem z użyciem rozwiązania sandrstar
ActivityManager
jest następujący: potrzebujesz pozwolenia na pobieranie zadań w ten sposób. Znalazłem lepszy sposób:Pozycja
Activity
na dole stosu powinna zawsze mieć domyślnie tę kategorię, podczas gdy inne działania jej nie powinny.Ale nawet jeśli to się nie powiedzie na niektórych urządzeniach, możesz to ustawić podczas uruchamiania
Activity
:źródło
Stworzyłem klasę bazową dla wszystkich moich działań, rozszerzając AppCompatActivity i która ma statyczny licznik:
Jak dotąd działało to wystarczająco dobrze; i niezależnie od wersji API. Wymaga to oczywiście, aby wszystkie działania rozszerzały tę klasę bazową - co w moim przypadku robią.
Edycja: Zauważyłem jeden przypadek, gdy licznik spada do zera, zanim aplikacja całkowicie się zamknie, czyli wtedy, gdy orientacja zostanie zmieniona i tylko jedno działanie jest otwarte. Kiedy zmienia się orientacja, działanie jest zamykane i tworzone jest inne, tak więc
onDestroyed
wywoływane jest ostatnie działanie, a następnieonCreate
wywoływane, gdy to samo działanie jest tworzone ze zmienioną orientacją. Należy uwzględnić to zachowanie; Ewentualnie można użyć OrientationEventListener .źródło
Android implementuje stos aktywności, sugeruję, abyś przeczytał o tym tutaj . Wygląda na to wszystko, co chcesz zrobić jest jednak odzyskać aktywność numerem:
getCallingActivity()
. Jeśli bieżąca aktywność jest pierwszą aktywnością w Twojej aplikacji, a aplikacja została uruchomiona z ekranu głównego, powinna (zakładam) powrócićnull
.źródło
Jedyną rzeczą, której tutaj brakowało, jest kliknięcie „klawisza Home”, po aktywacji nie można tego wykryć w swojej aktywności, więc lepiej byłoby programowo kontrolować stos aktywności, obsługując naciśnięcie klawisza „Wstecz” i przechodząc do żądanej czynności lub po prostu wykonując niezbędne kroki.
Ponadto nie możesz być pewien, że rozpoczęcie aktywności z listy „Ostatnia aktywność” można wykryć, ustawiając dodatkowe dane w celu otwarcia czynności, ponieważ w takim przypadku są one ponownie wykorzystywane.
źródło