2011-06-29 15 views
5

Korzystam z poniższego kodu w działaniu mojej aplikacji, aby uniemożliwić zamknięcie aplikacji z tyłu.Zapobieganie zamykaniu przycisku Wstecz aplikacji

/* Prevent app from being killed on back */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 

     // Back? 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      // Back 
      moveTaskToBack(true); 
     } 

     // Return 
     return super.onKeyDown(keyCode, event); 

    } 

To nie działa. Ta aplikacja ma być zgodna z Androidem 1.6 (API Level 4). Kliknięcie mojej ikony aplikacji powoduje ponowne uruchomienie mojej aplikacji w działaniu Splash (które jest głównym). Jak mogę zapobiec ponownemu zamknięciu mojej aplikacji?

Odpowiedz

8

Czy próbowałeś połączyć wywołanie super w innym bloku, więc jest on wywoływany tylko wtedy, gdy klucz nie jest KEYCODE_BACK?

/* Prevent app from being killed on back */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 

     // Back? 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      // Back 
      moveTaskToBack(true); 
      return true; 
     } 
     else { 
      // Return 
      return super.onKeyDown(keyCode, event); 
     } 
    } 

Szczerze mówiąc jednak, nie można powoływać się na to, bo kiedyś aplikacja znajduje się w tle, w każdej chwili może to być zawracany do systemu, aby odzyskać pamięć.

+0

Okazało się to doskonale. Wiem, że są wokół niego zastrzeżenia, ale uważam, że jest to bardzo odpowiednie. –

1

Nawet jeśli mógłbyś to zrobić, nie powinieneś. Zmuszanie użytkowników do stałego przechowywania aplikacji w pamięci nie jest dobrym pomysłem i tylko ich denerwuje.

10

bardziej zwięzły rozwiązanie: -

@Override 
public void onBackPressed() { 
    // do nothing. We want to force user to stay in this activity and not drop out. 
} 
0

Jeżeli potrzeba przejścia z powrotem, jak również w zapobieganiu przed zamknięciem, a Android WebView użyj:

@Override 
public void onBackPressed() { 
    if (mWebView.canGoBack()) { 
     mWebView.goBack(); 
     return; 
    } 

    // Otherwise defer to system default behavior. 
    super.onBackPressed(); 
} 
Powiązane problemy