2011-09-27 8 views
21

Chciałbym ostrzec użytkownika, jeśli tylna prasa zakończy ostatnią aktywność na stosie, tym samym opuszczając aplikację. Chciałbym wyskoczyć trochę tostu i wykryć drugie naciśnięcie wstecz w ciągu kilku następnych sekund, a dopiero potem zadzwonić pod numer finish().Android: Jak mogę wykryć, czy przycisk Wstecz spowoduje zamknięcie aplikacji (tj. Jest to ostatnia czynność pozostawiona na stosie)?

Już zakodowałem wykrywanie wstecznej prasy za pomocą onBackPressed(), ale nie mogę znaleźć oczywistego sposobu sprawdzenia, ile działań pozostało na tylnym stosie.

Dzięki.

Odpowiedz

20

reddit jest fajna aplikacja robi to by overriding the onKeyDown method:

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    //Handle the back button 
    if(keyCode == KeyEvent.KEYCODE_BACK && isTaskRoot()) { 
     //Ask the user if they want to quit 
     new AlertDialog.Builder(this) 
     .setIcon(android.R.drawable.ic_dialog_alert) 
     .setTitle(R.string.quit) 
     .setMessage(R.string.really_quit) 
     .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       //Stop the activity 
       finish();  
      } 
     }) 
     .setNegativeButton(R.string.no, null) 
     .show(); 

     return true; 
    } 
    else { 
     return super.onKeyDown(keyCode, event); 
    } 
} 
+1

isTaskRoot() wydaje się być najczystszą metodą, nie wymagającą dodatkowych uprawnień. Myślę, że to zwycięzca. –

+0

Co to jest ustawienie m? – berserk

+0

@berserk mUstawienia to tylko odniesienie do ustawień aplikacji określających, czy chcemy wyświetlić okno dialogowe potwierdzenia czy nie. w tym przykładzie nie jest to krytyczne. –

3

Biblioteka robi to, sprawdzając stos uruchomionych zadań i sprawdzając, czy następnym zadaniem jest ekran główny Androida. Zobacz handleApplicationClosing pod adresem https://github.com/kaeppler/droid-fu/blob/master/src/main/java/com/github/droidfu/activities/BetterActivityHelper.java.

Używam tego podejścia tylko w ostateczności, ponieważ jest dość hacky, nie działa we wszystkich sytuacjach i wymaga dodatkowych uprawnień, aby uzyskać listę uruchomionych zadań.

+0

Nie mam pojęcia, dlaczego wybrali aby sprawdzić wyraźnego wyrzutni Android raczej niż dla własnego pakietu, ale to umieścić mnie na właściwe tory. –

Powiązane problemy