應用場景:點擊兩次Back鍵退出當前程序
效果圖:
實現原理:onKeyDown()會捕獲當前點擊事件,如果當前keyCode等於BACK事件值就會執行ToQuitTheApp()方法。在ToQuitTheApp()方法中,首先判斷isExit的值,如果為false的話,則置為true,同時會彈出提示,並在3000毫秒(3秒)后發出一個消息,在Handler中接收到消息后將isExit值還原成false。如果在發送消息間隔的3秒內,再次按了BACK鍵,則再次執行exit方法,此時isExit的值已為true,則會執行退出程序的方法。
主要代碼:
package com.yc.toquitapp; import android.app.Activity; import android.content.Intent; 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 boolean isExit = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ClickTwiceBackToQuit } // 重寫Activity中onKeyDown()方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) {// 當keyCode等於退出事件值時 ToQuitTheApp(); return false; } else { return super.onKeyDown(keyCode, event); } } //封裝ToQuitTheApp方法 private void ToQuitTheApp() { if (isExit) { // ACTION_MAIN with category CATEGORY_HOME 啟動主屏幕 Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); System.exit(0);// 使虛擬機停止運行並退出程序 } else { isExit = true; Toast.makeText(MainActivity.this, "再按一次退出APP", Toast.LENGTH_SHORT).show(); mHandler.sendEmptyMessageDelayed(0, 3000);// 3秒后發送消息 } } //創建Handler對象,用來處理消息 Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) {//處理消息 // TODO Auto-generated method stub super.handleMessage(msg); isExit = false; } }; }
來源:http://www.cnblogs.com/renqingping/archive/2012/09/28/TwoTimesBack.html