目前基本上大部分应用都有这种功能,点击返回键第一次会提示用户,如果在2S内点击了第二次才会退出。
方法一:通过使用handler的延迟操作2s实现目的
//是否退出的标记:默认false,不退出
private boolean isExit = false;
/**
* 点击2次退出app
*
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && !isExit) {//判断是否为返回键和是否退出
//提示用户
ToastUtils.showShort("再按一次返回键退出app");
//设置标记
isExit = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//延时2s之后将退出标记重置
isExit = false;
}
}, 2000);
//返回true,将事件消费。
return true;
}
//如果上述条件不成立,则会执行正常的返回操作。
return super.onKeyDown(keyCode, event);
}
上面的代码也可以修改为:if条件OK时,handler发送一条延时2S消息,在handlerMessage里面设置条件继续满足。
方法二:通过判断2次back的时间差,判断是否退出
记录上次点击的时间,与本次点击的时间比较,当两次时间间隔小于一定值时,退出,否则提示“再按一次退出程序”,同时更新上次点击时间。
//上一次按back的时间
private long lastBackTime = 0;
/**
* 点击2次退出app
*
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//当去点击back按键时候的时间
long currentBackTime = System.currentTimeMillis();
//当间隔大于2s的时候
if (currentBackTime - lastBackTime > 2000) {
ToastUtils.showShort("再按一次返回键退出app");
//时间重新赋值
lastBackTime = currentBackTime;
} else {
finish();
}
//将事件消费
return true;
}
//如果上述条件不成立,则会执行正常的返回操作。
return super.onKeyDown(keyCode, event);
}
网友评论