android實(shí)現(xiàn)點(diǎn)擊兩次返回鍵實(shí)現(xiàn)退出功能

在使用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();

? ? ? ? ? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容