android如何實現(xiàn)點擊兩次返回鍵實現(xiàn)退出功能
在使用android平臺的app是我們經(jīng)常會發(fā)現(xiàn)點擊兩次返回鍵會提示是否退出的功能,下面講講此功能是如何實現(xiàn)的(此方法比較簡單)
第一種方法是對系統(tǒng)返回鍵進行監(jiān)聽,定義一個變量記錄按鍵時間,通過計算時間差來實現(xiàn)該功能,代碼如下:
//退出時的時間 private?long?mExitTime; //對返回鍵進行監(jiān)聽 @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); ????} } 第二種實現(xiàn)的基本原理就是,當按下BACK鍵時,會被onKeyDown捕獲,判斷是BACK鍵,則執(zhí)行exit方法。 在exit方法中,會首先判斷isExit的值,如果為false的話,則置為true,同時會彈出提示,并在2000毫秒(2秒)后發(fā)出一個消息,在Handler中將此值還原成false。如果在發(fā)送消息間隔的2秒內,再次按了BACK鍵,則再次執(zhí)行exit方法,此時isExit的值已為true,則會執(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?{ ????//?定義一個變量,來標識是否退出 ????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); ????????} ????} }