This has been driving me nuts for a while now.
Is there any way of reliably detecting if the home button has been pressed in an android application?
Failing that, is there a robust way of telling what caused an activity to go into onPause? i.e Can we detect if it was caused by a new activity launching or by pressing back/home.
One suggestion I have seen is to override onPause() and call isFinishing() but this will return false when pressing the home button just as it would if a new activity is starting so this fails to distinguish between the two.
Any help much appreciated.
** Update** :
Thanks to @android-hungry for this link: https://nishandroid.blogspot.com/
Overiding the following method:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
Then the following event WILL get fired for home button presses:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
I'm not sure if there are any side effects with this line:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
So it would seem that contrary to popular belief, you can in fact listen out for the home key. Worryingly, you can return false and have the home key do nothing.
Update:
As expected, there are some side affects with this - it seems that embedded videos and google maps are not visible with this mode enabled.
Update:
Supposedly this hack no longer works as of Android 4.0 onwards
Question&Answers:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…