Frage

Auf die Zurück-Taste drücken, würde ich meine Anwendung wie in den gestoppten Zustand zu gehen, anstatt der zerstörten Zustand.

Im Android docs heißt es:

  

... nicht alle Aktivitäten haben das Verhalten, dass sie zerstört werden, wenn BACK gedrückt wird. Wenn der Benutzer beginnt, Musik in der Musikanwendung zu spielen und drückt dann BACK, überschreibt die Anwendung das normale Rück Verhalten, von der Spieler-Aktivität verhindert wird zerstört, und weiterhin Musik zu spielen, obwohl seine Tätigkeit nicht mehr sichtbar ist

Wie kann ich replizieren diese Funktionalität in meiner eigenen Anwendung?

Ich denke, es muss drei Möglichkeiten sein ...

  1. Erfassen Sie die Zurück-Taste drücken (wie unten) und rufen Sie dann eine beliebige Methode (n) Anrufe, die Home-Taste.

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            Log.d(this.getClass().getName(), "back button pressed");
        }
        return super.onKeyDown(keyCode, event);
    }
    
  2. Nehmen Sie die Zurück-Taste drücken und dann eine Home-Taste drücken fälschen.

  3. die Zurück-Taste drücken Capture dann eine Aktivität auf dem Startbildschirm starten, effektiv meine Anwendung Aktivitäten in den gestoppten Zustand versetzt wird.

Edit: Ich weiß, über Dienstleistungen und bin mit einer in der Anwendung, auf die dieses Problem verwandt ist. Diese Frage ist speziell über die Aktivität in den gestoppten Zustand anstatt der zerstörten Zustand setzt auf die Zurück-Taste drücken.

War es hilfreich?

Lösung

Die meiste Zeit benötigen Sie einen Dienst erstellen etwas im Hintergrund auszuführen und Ihre sichtbar Activity steuert einfach diese Service. (Ich bin sicher, dass der Musik-Player in der gleichen Art und Weise funktioniert, so das Beispiel in der Dokumentation scheint ein wenig irreführend.) Wenn das der Fall ist, dann Activity kann wie gewohnt finish und die Service wird noch ausgeführt werden.

Ein einfacher Ansatz ist es, die Back Taste drücken zu erfassen und rufen Sie moveTaskToBack (true) wie folgt:

// 2.0 and above
@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Ich denke, die bevorzugte Option sein sollte für eine Aktivität normal zu beenden und in der Lage sein, sich selbst neu erstellen z.B. den aktuellen Status von einem Dienst zu lesen, wenn nötig. Aber moveTaskToBack kann als schnelle Alternative gelegentlich verwendet werden.

Hinweis : wie von Dave unter Android 2.0 führte ein neues Verfahren onBackPressed und diese Empfehlungen , wie die Zurück-Taste zu behandeln.

Andere Tipps

Verwenden Sie den folgenden Code ein:

public void onBackPressed() {    
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_MAIN);
    intent.addCategory(Intent.CATEGORY_HOME);
    startActivity(intent);
}

Wenn Sie die Zurück-Taste einen Blick auf dieser Beitrag auf dem Android-Entwickler-Blog . Er deckt den einfacheren Weg, dies in Android zu tun 2.0 und den besten Weg, dies für eine Anwendung zu tun, die auf 1.x läuft und 2.0.

Allerdings, wenn Ihre Aktivität wird gestoppt noch getötet werden kann, auf dem Gerät auf Speicherverfügbarkeit abhängig. Wenn Sie ein Prozess wollen ohne UI laufen sollten Sie eine Service erstellen. Die Dokumentation sagt folgendes über Dienstleistungen:

  

Ein Dienst hat keine visuelle Benutzeroberfläche, sondern läuft im Hintergrund auf unbestimmte Zeit. Zum Beispiel könnte ein Service Hintergrundmusik spielen, wenn der Benutzer auf andere Dinge beachtet, oder es könnte Daten über das Netzwerk holen oder etwas berechnen und das Ergebnis an Aktivitäten zur Verfügung stellen, die sie benötigen.

Dies scheint angemessen für Ihre Anforderungen.

versuchen Leere onBackPressed() in android.app.Activity Klasse definiert außer Kraft zu setzen.

, wenn es jemand anderes hilft, ich hatte eine Aktivität mit 2-Layout, die ich ein- und ausgeschaltet für visibilty und versuche, eine Art page1> page2 Struktur zu emulieren. wenn sie auf Seite 2 und drückten auf die Zurück-Button ich sie zurück zu Seite 1, gehen wollte, wenn sie die Zurück-Taste auf Seite 1 gedrückt soll es noch normal arbeiten. Es ist ziemlich einfach, aber es funktioniert

@Override
public void onBackPressed() {
// check if page 2 is open
    RelativeLayout page2layout = (RelativeLayout)findViewById(R.id.page2layout);
    if(page2layout.getVisibility() == View.VISIBLE){
        togglePageLayout(); // my method to toggle the views
        return;
    }else{
        super.onBackPressed(); // allows standard use of backbutton for page 1
    }

}

hoffe, es hilft jemand, cheers

Arbeitsbeispiel ..

Stellen Sie sicher, super.onBackPressed nicht nennen ();

@Override
public void onBackPressed() {
   Log.d("CDA", "onBackPressed Called");
   Intent setIntent = new Intent(Intent.ACTION_MAIN);
   setIntent.addCategory(Intent.CATEGORY_HOME);
   setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   startActivity(setIntent);
}

Auf diese Weise Ihre Back Button wirken wie Home-Taste. Es ist nicht Ihre Tätigkeit beendet, sondern es in dem Hintergrund nehmen

Zweiter Weg ist moveTaskToBack(true); in onBackPressed anrufen und sicher sein, super.onBackPressed entfernen

Noch besser ist, wie etwa OnPause () :

als Teil der Aktivität Lebenszyklus aufgerufen, wenn eine Aktivität in den Hintergrund geht, hat aber (noch) nicht getötet worden. Das Gegenstück zu onResume ().

Wenn Aktivität B vor Aktivität A gestartet wird, wird dieser Rückruf bei A. B aufgerufen wird nicht bis A die onPause () zurückkehrt angelegt werden, so sicher sein toenter code here nichts tun, lange hier.

Dieser Callback meist zum Speichern eines persistenten Zustandes verwendet wird, die Aktivität bearbeitet und sicherstellen, dass nichts verloren geht, wenn nicht genügend Ressourcen sind diese eine die neue Aktivität zu starten, ohne zuerst zu töten.

Dies ist auch ein guter Ort, um Dinge zu tun, wie Stop-Animationen und andere Dinge, die einen merklichen Menge an CPU verbrauchen, um den Schalter auf die nächste Aktivität, so schnell wie möglich zu machen, oder Ressourcen zu schließen, die exklusive Zugang sind wie die Kamera.

außer Kraft setzen onBackPressed () nach Android 2.0. Wie

@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

Ich habe @Mirko N. verwenden answser die neue Gewohnheit EditText gemacht mit

 public class EditViewCustom extends EditText {

    Button cancelBtn;
    RelativeLayout titleReleLayout;
    public EditViewCustom(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public EditViewCustom(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditViewCustom(Context context) {
        super(context);
    }

    public void setViews(Button cancelBtn,RelativeLayout titleReleLayout){
        this.cancelBtn = cancelBtn;
        this.titleReleLayout = titleReleLayout;
    }

    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
            Log.d("KEYCODE_BACK","KEYCODE_BACK");
            cancelBtn.setVisibility(View.GONE);
            this.setFocusableInTouchMode(false);
            this.setFocusable(false);
            titleReleLayout.setVisibility(View.VISIBLE);

            return super.onKeyPreIme(keyCode, event);
          }

        return super.onKeyPreIme(keyCode, event);
    }

}

Dann setzen Sie Daten aus Ihrer Aktivität

 searchEditView.setViews(cancelBtn, titleRelativeLayout);

Danke.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top