目前基本上大部分應(yīng)用都有這種功能,點(diǎn)擊返回鍵第一次會(huì)提示用戶,如果在2S內(nèi)點(diǎn)擊了第二次才會(huì)退出。
方法一:通過使用handler的延遲操作2s實(shí)現(xiàn)目的
//是否退出的標(biāo)記:默認(rèn)false,不退出
private boolean isExit = false;
/**
* 點(diǎn)擊2次退出app
*
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && !isExit) {//判斷是否為返回鍵和是否退出
//提示用戶
ToastUtils.showShort("再按一次返回鍵退出app");
//設(shè)置標(biāo)記
isExit = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//延時(shí)2s之后將退出標(biāo)記重置
isExit = false;
}
}, 2000);
//返回true,將事件消費(fèi)。
return true;
}
//如果上述條件不成立,則會(huì)執(zhí)行正常的返回操作。
return super.onKeyDown(keyCode, event);
}
上面的代碼也可以修改為:if條件OK時(shí),handler發(fā)送一條延時(shí)2S消息,在handlerMessage里面設(shè)置條件繼續(xù)滿足。
方法二:通過判斷2次back的時(shí)間差,判斷是否退出
記錄上次點(diǎn)擊的時(shí)間,與本次點(diǎn)擊的時(shí)間比較,當(dāng)兩次時(shí)間間隔小于一定值時(shí),退出,否則提示“再按一次退出程序”,同時(shí)更新上次點(diǎn)擊時(shí)間。
//上一次按back的時(shí)間
private long lastBackTime = 0;
/**
* 點(diǎn)擊2次退出app
*
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
//當(dāng)去點(diǎn)擊back按鍵時(shí)候的時(shí)間
long currentBackTime = System.currentTimeMillis();
//當(dāng)間隔大于2s的時(shí)候
if (currentBackTime - lastBackTime > 2000) {
ToastUtils.showShort("再按一次返回鍵退出app");
//時(shí)間重新賦值
lastBackTime = currentBackTime;
} else {
finish();
}
//將事件消費(fèi)
return true;
}
//如果上述條件不成立,則會(huì)執(zhí)行正常的返回操作。
return super.onKeyDown(keyCode, event);
}