今天在做项目的时候,要实现的一个对home键监听的功能,就是点击home键后,应用不推到后台,而是直接地退出应用了,一开始觉得很简单,也相信很多人都会觉得直接调用onKeyDown()方法不就行了嘛,于是,我也是这么尝试的:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch(keyCode){
case KeyEvent.KEYCODE_BACK:
System.exit(0);
break;
case KeyEvent.KEYCODE_HOME:
System.exit(0);
break;
default:
break;
}
return super.onKeyDown(keyCode, event);
}
好像很完美的样子。然后导入项目,点击home,特么怎么还是把应用切入后台了,不是应该直接退出应用了嘛?
丢。。。原来对home的监听时系统级的操作,所以,根本在onKeyDown这么low的方法上行不通,当然对back和menu的监听是完全没有问题的。
所以,只能另辟蹊径了,想想不是还有监听广播嘛,也对,就去搜Home的广播,但是就这样被我搜到了一个好的方法,根本不用这么复杂,也就一个方法就可以搞定的事了。
这个方法就是onUserLeaveHint(),好高大上的感觉,短按home键的时候就是会进入该方法,就这么直接了当。
代码如下喽,实现如此简单:
/**
* 短按Home键灰进入该方法,起到间接监听到home时间
*/
@Override
protected void onUserLeaveHint() {
System.exit(0);
super.onUserLeaveHint();
}
但是,要注意的是:只有在短按home键的时候,才会进入该方法,长按时没有用的,一定要记住。至于广播监听能否实现我觉得是可以的,可以自己去实现。
最后,因为要显得高级一点,所以在使用home键的时候,我一般都没有点击home实体键,而是直接使用终端adb命令实现的(其实我想说的是,做车载导航的,在测试板着这种开发电路板上哪有home键啊,只能这样乖乖的去搞adb啦),下面奉上基本常用的adb模拟实体键:
电话键
KEYCODE_CALL | 拨号键 | 5 |
KEYCODE_ENDCALL | 挂机键 | 6 |
KEYCODE_HOME | 按键Home | 3 |
KEYCODE_MENU | 菜单键 | 82 |
KEYCODE_BACK | 返回键 | 4 |
KEYCODE_SEARCH | 搜索键 | 84 |
KEYCODE_CAMERA | 拍照键 | 27 |
KEYCODE_FOCUS | 拍照对焦键 | 80 |
KEYCODE_POWER | 电源键 | 26 |
KEYCODE_NOTIFICATION | 通知键 | 83 |
KEYCODE_MUTE | 话筒静音键 | 91 |
KEYCODE_VOLUME_MUTE | 扬声器静音键 | 164 |
KEYCODE_VOLUME_UP | 音量增加键 | 24 |
KEYCODE_VOLUME_DOWN | 音量减小键 | 25 |