在使用android平臺(tái)的app是我們經(jīng)常會(huì)發(fā)現(xiàn)點(diǎn)擊兩次返回鍵會(huì)提示是否退出的功能,下面講講此功能是如何實(shí)現(xiàn)的
第一種方法:
是對(duì)系統(tǒng)返回鍵進(jìn)行監(jiān)聽(tīng),定義一個(gè)變量記錄按鍵時(shí)間,通過(guò)計(jì)算時(shí)間差來(lái)實(shí)現(xiàn)該功能,代碼如下:
//退出時(shí)的時(shí)間
private long mExitTime;
//對(duì)返回鍵進(jìn)行監(jiān)聽(tīng)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
????if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
????????exit();
????????return true;
????}
????return super.onKeyDown(keyCode, event);
}
public void exit() {
????if ((System.currentTimeMillis() - mExitTime) > 2000) {
????????Toast.makeText(MainActivity.this, "再按一次退出此應(yīng)用", Toast.LENGTH_SHORT).show();
????????mExitTime = System.currentTimeMillis();
????} else {
????????MyConfig.clearSharePre(this, "users");
????????finish();
????????System.exit(0);
????}
}
第二種方法:
基本原理就是,當(dāng)按下BACK鍵時(shí),會(huì)被onKeyDown捕獲,判斷是BACK鍵,則執(zhí)行exit方法。
在exit方法中,會(huì)首先判斷isExit的值,如果為false的話,則置為true,同時(shí)會(huì)彈出提示,并在2000毫秒(2秒)后發(fā)出一個(gè)消息,在Handler中將此值還原成false。如果在發(fā)送消息間隔的2秒內(nèi),再次按了BACK鍵,則再次執(zhí)行exit方法,此時(shí)isExit的值已為true,則會(huì)執(zhí)行退出的方法。
// 定義一個(gè)變量,來(lái)標(biāo)識(shí)是否退出
private static boolean isExit = false;
Handler mHandler = new Handler() {
????@Override
????public void handleMessage(Message msg) {
????super.handleMessage(msg);
????isExit = false;
????}
};
@Override
????public boolean onKeyDown(int keyCode, KeyEvent event) {
????????if (keyCode == KeyEvent.KEYCODE_BACK) {
????????exit();
????????return false;
? ? ?}
????return super.onKeyDown(keyCode, event);
}
private void exit() {
????if (!isExit) {
????????isExit = true;
? ? ? ? ?Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
????????// 利用handler延遲發(fā)送更改狀態(tài)信息
????????mHandler.sendEmptyMessageDelayed(0, 2000);
????} else {
????????finish();
????????System.exit(0);
????}
}
shift+F10 運(yùn)行
第三種方法:
于Activity 可以單獨(dú)獲取Back鍵的按下事件,直接重寫onBackPressed方法即可,代碼如下
@Overridepublicvoid onBackPressed() {
//super.onBackPressed();這句話一定要注掉,不然又去調(diào)用默認(rèn)的back處理方式了// 這里處理邏輯代碼,大家注意:該方法僅適用于2.0或更新版的sdk}
eg:雙擊退出應(yīng)用程序:
/**
? * 返回鍵兩次點(diǎn)擊,第一次點(diǎn)擊的時(shí)間
? */
? private long exitTime = 0;
? @Override
? public void onBackPressed() {
? ? ? //super.onBackPressed();這句話一定要注掉,不然又去調(diào)用默認(rèn)的back處理方式了
? ? ? // 這里處理邏輯代碼,大家注意:該方法僅適用于2.0或更新版的sdk
? ? ? ? ? ? if ((System.currentTimeMillis() - exitTime) > 2000) {
? ? ? ? ? ? ? ? Toast.makeText(getApplicationContext(), "再按一次退出程序",
? ? ? ? ? ? ? ? ? ? ? ? Toast.LENGTH_SHORT).show();
? ? ? ? ? ? ? ? exitTime = System.currentTimeMillis();
? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? finish();
? ? ? ? ? ? }
}