android如何實現(xiàn)點擊兩次返回鍵實現(xiàn)退出功能
[導讀]在使用android平臺的app是我們經(jīng)常會發(fā)現(xiàn)點擊兩次返回鍵會提示是否退出的功能,下面講講此功能是如何實現(xiàn)的(此方法比較簡單)第一種方法是對系統(tǒng)返回鍵進行監(jiā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秒內(nèi),再次按了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);
????????}
????}
} 




