Das hat mich schon eine Weile verrückt gemacht.
Gibt es eine Möglichkeit, zuverlässig zu erkennen, ob die Home-Taste in einer Android-Anwendung gedrückt wurde?
Wenn dies nicht der Fall ist, gibt es eine zuverlässige Methode, um festzustellen, warum eine Aktivität in onPause gestartet wurde? dh Können wir feststellen, ob dies durch den Start einer neuen Aktivität oder durch Drücken von Zurück / Nach Hause verursacht wurde?
Ein Vorschlag, den ich gesehen habe, ist, onPause () zu überschreiben und isFinishing () aufzurufen. Dies gibt jedoch false zurück, wenn die Home-Taste gedrückt wird, genau wie beim Starten einer neuen Aktivität, sodass zwischen beiden nicht unterschieden werden kann.
Jede Hilfe sehr geschätzt.
** Update **: Danke an @ android-hungrig für diesen Link: https://nishandroid.blogspot.com/
Überschreiben der folgenden Methode:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
Dann wird das folgende Ereignis für das Drücken der Home-Taste ausgelöst:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
Ich bin nicht sicher, ob es irgendwelche Nebenwirkungen mit dieser Linie gibt:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
Es scheint also, dass Sie entgegen der landläufigen Meinung tatsächlich auf den Home-Schlüssel achten können. Besorgniserregend ist, dass Sie false zurückgeben und den Home-Schlüssel nichts tun lassen können.
Update : Wie erwartet gibt es einige Nebenwirkungen - es scheint, dass eingebettete Videos und Google Maps bei aktiviertem Modus nicht sichtbar sind.
Update : Angeblich funktioniert dieser Hack ab Android 4.0 nicht mehr
Activity.onUserLeaveHint()
.