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)的(此方法比較簡(jiǎ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,?"再按一次退出每日新聞",?Toast.LENGTH_SHORT).show();
????????mExitTime?=?System.currentTimeMillis();
????}?else?{
????????MyConfig.clearSharePre(this,?"users");
????????finish();
????????System.exit(0);
????}
}
第二種實(shí)現(xiàn)的基本原理就是,當(dāng)按下BACK鍵時(shí),會(huì)被onKeyDown捕獲,判斷是BACK鍵,則執(zhí)行exit方法。
在exit方法中,會(huì)首先判斷isExit的值,如果為false的話(huà),則置為true,同時(shí)會(huì)彈出提示,并在2000毫秒(2秒)后發(fā)出一個(gè)消息,在Handler中將此值還原成false。如果在發(fā)送消息間隔的2秒內(nèi),再次按了BACK鍵,則再次執(zhí)行exit方法,此時(shí)isExit的值已為true,則會(huì)執(zhí)行退出的方法。import?android.app.Activity;
import?android.os.Bundle;
import?android.os.Handler;
import?android.os.Message;
import?android.view.KeyEvent;
import?android.widget.Toast;
public?class?MainActivity?extends?Activity?{
????//?定義一個(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
????protected?void?onCreate(Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.activity_main);
????}
????@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);
????????}
????}
} 




