Ich habe derzeit eine Aktivität, bei der eine Benachrichtigung auch in der Benachrichtigungsleiste angezeigt wird, wenn sie angezeigt wird.
Dies ist so, dass der Benutzer, wenn er nach Hause drückt und die Aktivität in den Hintergrund gerückt wird, über die Benachrichtigung zur Aktivität zurückkehren kann.
Das Problem tritt auf, wenn ein Benutzer die Zurück-Taste drückt, meine Aktivität zerstört wird, die Benachrichtigung jedoch so bleibt, wie ich möchte, dass der Benutzer zurück drücken kann, aber dennoch über die Benachrichtigung zur Aktivität gelangen kann. Aber wenn ein BENUTZER dies versucht, erhalte ich Nullzeiger als Versuch, eine neue Aktivität zu starten, anstatt die alte zurückzubringen.
Im Wesentlichen möchte ich, dass die Schaltfläche "Zurück" genauso funktioniert wie die Schaltfläche "Startseite". So habe ich es bisher versucht:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("CDA", "onKeyDown Called");
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
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);
return;
}
Der obige Code scheint jedoch weiterhin zu ermöglichen, dass meine Aktivität zerstört wird. Wie kann ich verhindern, dass meine Aktivität zerstört wird, wenn die Zurück-Taste gedrückt wird?
quelle
, the
<` ändern müssen, um ein>
.Antworten:
Entfernen Sie Ihren Key Listener oder kehren
true
Sie zurück, wenn Sie habenKEY_BACK
.Sie müssen nur die im Anschluss an die Zurück - Taste zu fangen (Achten Sie darauf , nicht zu nennen Super in
onBackPressed()
).Wenn Sie vorhaben, einen Dienst im Hintergrund auszuführen
startForeground()
, sollten Sie sich eine laufende Benachrichtigung ansehen und sicherstellen, da Android sonst Ihren Dienst beendet, wenn Speicher freigegeben werden muss.quelle
Es war einfacher, es nur mit einer Codezeile zu implementieren:
quelle
Ich denke, Sie möchten nicht die Schaltfläche "Zurück" überschreiben (das scheint einfach keine gute Idee zu sein - Android OS definiert dieses Verhalten, warum sollte es geändert werden?), Sondern den Aktivitätslebenszyklus verwenden und Ihre Einstellungen / Daten im beibehalten Ereignis onSaveInstanceState (Bundle) .
Dann verwenden Sie onCreate (Bundle) , um alles aus diesem dauerhaften Bundle herauszuholen und Ihren Status neu zu erstellen.
Betrachten Sie den obigen Pseudocode, um in die richtige Richtung zu weisen. Wenn Sie sich über den Aktivitätslebenszyklus informieren , können Sie den besten Weg finden, um das zu erreichen, wonach Sie suchen.
quelle
mach das einfach ..
//super.onBackPressed () auskommentieren; wird den Trick machen
quelle
Versuche dies:
quelle
Nur für den Fall, dass Sie das Verhalten der Zurück-Taste (unten am Telefon) und der Home-Taste (links neben der Aktionsleiste) behandeln möchten, kann diese benutzerdefinierte Aktivität, die ich in meinem Projekt verwende, Ihnen helfen .
Anwendungsbeispiel für Ihre Aktivität:
quelle
quelle
In Kotlin:
Für weitere Informationen können Sie überprüfen diese .
Es gibt auch spezielle Fragen zum Überschreiben der Zurück-Schaltfläche in Kotlin.
quelle