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: http://nisha113a5.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
override onUserLeaveHint method can catch the home press event, but you need also consider user click events. following codes works for me.
It's a bad idea to change the behavior of the home key. This is why Google doesn't allow you to override the home key. I wouldn't mess with the home key generally speaking. You need to give the user a way to get out of your app if it goes off into the weeds for whatever reason.
I'd image any work around will have unwanted side effects.
You might consider a solution by Andreas Shrade in his post on How-To Create a Working Kiosk Mode in Android. It's a bit hacky, but given the reasons that interception of the home button is prevented it has to be ;)
Try to create a counter for each screen. If the user touch HOME, then the counter will be zero.
Following code works for me :)
It is impossible to detect and/or intercept the HOME button from within an Android app. This is built into the system to prevent malicious apps that cannot be exited.