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;