前言:
Android开发者应该对onKeyDown这个方法不陌生,这个是Activity中监听用户操作物理按键时会进行回调,我们可以根据这个回调动作做你需要的一些处理,下边我会说告诉大家我程序中实际是如何处理onKeyDown事件的。
1、启屏页
启屏页中我们一般都会放一张推广图或者欢迎页等,然后做个延时,那么这个时候如果用户突然不小心按了返回键,那么这个Activity就直接销毁了,也就意味着程序就被kill掉了,但是对用户来说他以为他只是做了一个返回的操作,然后用户又去打开你的程序,发现居然是重启,emmm,体验极不舒适,不过没关系,只要做个处理就行了,在启屏页的那个Activity中屏蔽掉用户的返回键就可以了,具体如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
return true;
}
return super.onKeyDown(keyCode, event);
}
可能有的同学发出疑问:我看好多APP启屏页也没做这个处理啊,当然,这个不是必须要处理的,还是要根据项目的实际需求来做取舍。
2、登录界面
在登录界面的时候我们按照一般页面交互逻辑,这个时候按下返回键一般就直接退出程序了,因为不管你是退出登录返回到登录界面还是从启屏页到登录界面,正常情况下我们都要finish掉其它Activity,所以这个我认为是很有必要做处理的,只需实现只在冷启动时显示启动页,即点击返回键与点击HOME键退出效果一致,具体如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
return true;
}
return super.onKeyDown(keyCode, event);
}
3、主页面
程序处在主页面的时候,再不做任何处理的情况下,按下返回键一般逻辑肯定是直接退出程序了,我们比较常见的APP处理方式大多都是在规定时间内按两次退出、或者按返回键给个Dialog询问是否确定退出,小编程序中使用的是第一种,也推荐第一种,因为不会降低用户对你程序的反感度,具体如下:
private long exitTime;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (System.currentTimeMillis() - exitTime > 2000) {
Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
} else {
MainActivity.this.finish();
}
return true;
}
return super.onKeyDown(keyCode, event);
}