private boolean flag = true;
private static final intWHAT_RESET_BACK=1;
privateHandlerhandler=newHandler() {
@Override
public voidhandleMessage(Message msg) {
switch(msg.what) {
caseWHAT_RESET_BACK:
flag=true;
break;
}
}
};
@Override
public booleanonKeyUp(intkeyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK&&flag) {
Toast.makeText(this,"再点击一次,退出应用", Toast.LENGTH_SHORT).show();
flag=false; //第一次点击进来把flag的值赋为false,第二次点击的时候由于if()里面的条件 不 成立,则直接走最后一步退出
handler.sendEmptyMessageDelayed(WHAT_RESET_BACK,2000);
return true; //返回true不退出,不走最后一步,所以不退出应用
}
return super.onKeyUp(keyCode, event);//退出
}
思路解释:
首先需要在MainActivity里面重写onKeyUp方法:
keyCode == KeyEvent.KEYCODE_BACK && flag 判断是否按了手机上的返回键 flag默认为true
private boolean flag = true; //声明一个boolean值,默认为true
然后使用Handler发送一个延迟2秒的消息:
//两秒后发送一个消息,如果两秒内点击了两次的话,就直接跳最后一步退出应用,因为第一次进来的时候已经把flag的值设为false
// if()里面的条件不成立,所以直接跳最后一步(return super.onKeyUp(keyCode, event);//退出)
handler.sendEmptyMessageDelayed(WHAT_RESET_BACK,2000);
//如果两秒内没有点击第二次的话,发送消息就执行下面代码
case WHAT_RESET_BACK :
flag=true; //把值设为恢复为true,两秒后再次点击进来就不会执行 return super.onKeyUp(keyCode, event);,等于又重新认为你是第一次点击
break;