实现这个功能的原理很简单。监听后退按钮的点击事件。
① 首次按下后退按钮,设置一个标志,检查这个标志,如果为false,则将标志置为true,并获取首次按下后退按钮的时间保存下来;
② 再次按下后退按钮,检查到标志位true。并将此次按钮按下的事件和保存的时间对比,如果小于某个时间间隔则退出应用。否则,更新首次按下后退按钮的时间为此次时间。
废话不多说,直接上代码:
// 监听后退按钮
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (!isBack) {
Toast.
makeText
(
this
,
"再按一次退出!"
, Toast.
LENGTH_SHORT
).show();
downTime = event.getDownTime();
isBack = true;
return true;
} else {
if (event.getDownTime() - downTime <= 2000) {
finish();
} else {
Toast.
makeText
(
this
,
"再按一次退出!"
, Toast.
LENGTH_SHORT
).show();
downTime = event.getDownTime();
return true;
}
}
}
如果想要进一步的优化,可以将标志位直接用downTime取代。将downTime的初值设置为0,比较downTime的值来判断,代码如下:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (downtime == 0) {
downtime = event.getDownTime();
Toast.makeText(this, "再按一次退出!", Toast.LENGTH_SHORT).show();
return true;
} else {
if (event.getDownTime() - downtime <= 2000) {//如果间隔大于2秒,则退出
finish();
return true;
} else {
downtime = event.getDownTime();
Toast.makeText(this, "再按一次退出!", Toast.LENGTH_SHORT).show();
return true;
}
}
}
return super.onKeyDown(keyCode, event);
}
这样就完成了一个后退按钮连续两次按下才能退出的功能。其中时间间隔可以修改成你认为合适的值。