以上兩個功能主要是參考了一下部落格的:
http://blog.csdn.net/chenshijun0101/article/details/7682210
http://blog.csdn.net/winlinking/article/details/6596455
方法一:
按兩次返回鍵退出程式:
public class Exit {
private boolean isExit = false;private Runnable task = new Runnable() {@Overridepublic void run() {isExit = false;}};public void doExitInOneSecond() {isExit = true;HandlerThread thread = new HandlerThread("doTask");thread.start();new Handler(thread.getLooper()).postDelayed(task, 1000);}public boolean isExit() {return isExit;}public void setExit(boolean isExit) {this.isExit = isExit;}}
Activity:
public class Back2FinishAppActivity extends Activity {Exit exit = new Exit(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { pressAgainExit(); return true; } return super.onKeyDown(keyCode, event); } private void pressAgainExit() { if (exit.isExit()) { finish(); } else { Toast.makeText(getApplicationContext(), "再按一次退出程式", Toast.LENGTH_SHORT).show(); exit.doExitInOneSecond(); } } }
長按返回鍵退出程式:
public boolean dispatchKeyEvent(KeyEvent event) { int keyCode=event.getKeyCode(); switch(keyCode) { case KeyEvent.KEYCODE_BACK: { if(event.isLongPress()) { this.stopService(intent); System.exit(0); return true; }else { return false; } } } return super.dispatchKeyEvent(event); }
方法二:
- private long exitTime = 0;
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
- if((System.currentTimeMillis()-exitTime) > 2000){
- Toast.makeText(getApplicationContext(), "再按一次退出程式", Toast.LENGTH_SHORT).show();
- exitTime = System.currentTimeMillis();
- } else {
- finish();
- System.exit(0);
- }
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
歡迎轉載:http://blog.csdn.net/johnny901114/article/details/7823048