步骤:
1.定义一个布尔值来记录是否按了一次
2.利用onkeydown方法监听你的按键
3.写一个方法里面包含,做出按了一次该出现的动作和效果和按了两次该出现的动作和效果逻辑代码
4.利用handler的sendEmptyMessageDelayed()延迟两秒发送并改变布尔值,从而实现两秒钟之后是否把已按次数清空
具体实现步骤:
1.
boolean isExit = false;
2.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
//这里所监听的是按下的回退键,没按下一次执行一次exit()方法
if(keyCode==KeyEvent.KEYCODE_BACK){
exit();
return false;
}else{
return super.onKeyDown(keyCode, event);
}
}
3.
private void exit() {
// TODO Auto-generated method stub
if(!isExit){
//这个把isExit设为true表示按下一次
isExit=true;
Toast.makeText(MainActivity.this,"两秒钟之内按两次退出!", Toast.LENGTH_SHORT).show();
//如果在两秒钟之类没有做任何操作,则执行下面这一句里面的逻辑
myhandler.sendEmptyMessageDelayed(0, 2000);
}else{
finish();
}
}
4.
Handler myhandler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
//这里说明了如果上一次操作超过了两秒,它会把isExit变成了false,所以它就不会退出了,因为当isExit等于false时做出的反应是提示是否退出
isExit=false;
}
};
整个原理:
*当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。
在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在Handler中将此值还原成false。
如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此时isExit的值已为true,则会执行退出的方法。*