Überbrückungstaste zurück, wie Home-Taste handeln
-
18-09-2019 - |
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 ...
-
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); }
-
Nehmen Sie die Zurück-Taste drücken und dann eine Home-Taste drücken fälschen.
-
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.
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.