Android實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用實(shí)現(xiàn)方法詳解
前言
現(xiàn)在市面上很多應(yīng)用都會有當(dāng)用戶按返回鍵的時(shí)候提示用戶:再按一次將退出應(yīng)用的提示,也就是雙擊雙擊返回鍵退出應(yīng)用,接下來我們就用幾種辦法來實(shí)現(xiàn)這個(gè)功能
效果圖

實(shí)現(xiàn)
第一種辦法
響應(yīng)Activity的 onKeyUp事件,兩次點(diǎn)擊時(shí)間大于2秒鐘就不響應(yīng),小于2秒鐘就退出程序
代碼:
//記錄用戶首次點(diǎn)擊返回鍵的時(shí)間
private long firstTime = 0;
/**
* 第一種解決辦法 通過監(jiān)聽keyUp
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
long secondTime = System.currentTimeMillis();
if (secondTime - firstTime > 2000) {
Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
firstTime = secondTime;
return true;
} else {
System.exit(0);
}
}
return super.onKeyUp(keyCode, event);
}
第二種辦法
和第一種辦法一樣,這不過這次響應(yīng)onKeyDown事件
代碼:
/**
* 第二種辦法
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
long secondTime = System.currentTimeMillis();
if (secondTime - firstTime > 2000) {
Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
firstTime = secondTime;
return true;
} else {
System.exit(0);
}
}
return super.onKeyDown(keyCode, event);
}
第三種辦法
直接重寫onBackPressed()方法
代碼:
/**
* 第三種方法
*/
@Override
public void onBackPressed() {
long secondTime = System.currentTimeMillis();
if (secondTime - firstTime > 2000) {
Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
firstTime = secondTime;
} else {
System.exit(0);
}
第四種辦法
通過線程延時(shí)的辦法實(shí)現(xiàn),借助Timer
代碼:
/**
* 第四種方法
*/
@Override
public void onBackPressed() {
if (!mBackKeyPressed) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mBackKeyPressed = true;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mBackKeyPressed = false;
}
}, 2000);
} else {
this.finish();
System.exit(0);
}
}
第五種辦法
在onKeyUp()方法內(nèi)使用Timer
/**
* 第五種辦法
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
if (!mBackKeyPressed) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mBackKeyPressed = true;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mBackKeyPressed = false;
}
}, 2000);
return true;
} else {
this.finish();
System.exit(0);
}
}
return super.onKeyUp(keyCode, event);
}
第六種辦法
在onKeyDown()方法內(nèi)使用Timer
/**
* 第六種辦法
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if (!mBackKeyPressed) {
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
mBackKeyPressed = true;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mBackKeyPressed = false;
}
}, 2000);
return true;
} else {
this.finish();
System.exit(0);
}
}
return super.onKeyDown(keyCode, event);
}
OK,到此就結(jié)束了,原理都差不多。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程ProgressBar自定義樣式之動(dòng)畫模式實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程ProgressBar自定義樣式之動(dòng)畫模式實(shí)現(xiàn)方法,涉及Android動(dòng)畫模式的布局技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-10-10
Android使用多線程進(jìn)行網(wǎng)絡(luò)聊天室通信
這篇文章主要為大家詳細(xì)介紹了Android使用多線程進(jìn)行網(wǎng)絡(luò)聊天室通信,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
關(guān)于如何使用Flutter開發(fā)執(zhí)行操作系統(tǒng)shell命令的工具詳解
本文主要介紹如何在Flutter應(yīng)用中開發(fā)一個(gè)Android終端命令行工具,包括終端命令行頁面的布局設(shè)計(jì)、與Shell通信的基本原理、輸入輸出處理的基本技巧等,以及如何在具體應(yīng)用中利用終端命令行工具來執(zhí)行系統(tǒng)命令和與用戶進(jìn)行交互2023-06-06
Android中使用的定時(shí)針(刷新頁面請求服務(wù)器)詳解
這篇文章主要介紹了Android中使用的定時(shí)針(刷新頁面請求服務(wù)器)詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12
android讀取Assets圖片資源保存到SD卡實(shí)例
本文為大家詳細(xì)介紹下android讀取Assets圖片資源保存到SD卡的具體實(shí)現(xiàn),感興趣的各位可以參考下哈,希望對大家有所幫助2013-07-07
Android AutoCompleteTextView控件基本用法示例
這篇文章主要介紹了Android AutoCompleteTextView控件基本用法,結(jié)合實(shí)例形式分析了AutoCompleteTextView控件的功能、使用方法及相關(guān)操作步驟,需要的朋友可以參考下2016-06-06
Android仿新浪微博自定義ListView下拉刷新(4)
這篇文章主要為大家詳細(xì)介紹了Android仿新浪微博自定義ListView下拉刷新,重點(diǎn)介紹了Adapter的詳細(xì)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android 通過TCP協(xié)議上傳指定目錄文件的方法
這篇文章主要介紹了Android 通過TCP協(xié)議上傳指定目錄文件的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Android仿今日頭條APP實(shí)現(xiàn)下拉導(dǎo)航選擇菜單效果
這篇文章主要為大家詳細(xì)介紹了Android仿今日頭條APP實(shí)現(xiàn)下拉導(dǎo)航選擇菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Android應(yīng)用第一次安裝成功點(diǎn)擊“打開”后Home鍵切出應(yīng)用后再點(diǎn)擊桌面圖標(biāo)返回導(dǎo)致應(yīng)用重啟問題的解決方法
這篇文章主要介紹了Android應(yīng)用第一次安裝成功點(diǎn)擊“打開”后Home鍵切出應(yīng)用后再點(diǎn)擊桌面圖標(biāo)返回導(dǎo)致應(yīng)用重啟問題的解決方法,需要的朋友可以參考下2016-11-11

