Saturday, June 23, 2018

Detect home button press in android

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

No comments:

Post a Comment

plot explanation - Why did Peaches' mom hang on the tree? - Movies & TV

In the middle of the movie Ice Age: Continental Drift Peaches' mom asked Peaches to go to sleep. Then, she hung on the tree. This parti...