Android 关于长按back键退出应用程序的实现
生活随笔
收集整理的這篇文章主要介紹了
Android 关于长按back键退出应用程序的实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Android 關于長按back鍵退出應用程序的實現
?????最近在做一個Android上的應用,碰到一個問題就是如何實現長按back鍵退出應用程序。在網上查找了很多資料,發現幾乎沒有這樣的實現,大部分在處理時是雙擊back鍵來退出應用程序。參考了一下雙擊back鍵退出應用程序的代碼,網上主流的一種方法是下面這種方法,實現起來比較簡單:
//代碼來自:http://www.devdiv.com/home.php?mod=space&uid=67600&do=blog&id=7024 @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {if ((System.currentTimeMillis() - mExitTime) > 2000) {mHelperUtils.showToast(mContext, R.string.exit_content);mExitTime = System.currentTimeMillis();}else {finish();}return true;}return super.onKeyDown(keyCode, event);}從上面的代碼可以看出,采用的思路就是連續兩次點擊back鍵的時間間隔在2s以內,則認為是雙擊,從而退出程序。
因此,借鑒上面的思路,我的最初想法是:可以重寫onKeyDown方法和onKeyUp方法,計算這執行這兩個方法之間的時間間隔,如果大于2s,則認為是長按,從而退出程序;否則,則執行back鍵原有的響應。按照這個思路:
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0) { start=System.currentTimeMillis(); Log.e("start",String.valueOf(start));return false; } return super.onKeyDown(keyCode, event);} public boolean onKeyUp(int keyCode,KeyEvent event){if (keyCode == KeyEvent.KEYCODE_BACK &&event.getRepeatCount()==0) { end=System.currentTimeMillis(); Log.e("end",String.valueOf(end));if(start!=-1&&(end-start)>2000){AlertDialog.Builder builder = new Builder(MainActivity.this);builder.setMessage("確認退出嗎?");builder.setTitle("提示");builder.setPositiveButton("確認",new DialogInterface.OnClickListener(){public void onClick(DialogInterface dialog,int which){dialog.dismiss();MainActivity.this.finish();System.exit(0);}});builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {dialog.dismiss();}});builder.create().show();return true;}else{return super.onKeyUp(keyCode, event);}}return super.onKeyUp(keyCode, event);}然而,這樣能夠實現長按back鍵退出程序,但是非長按back鍵的時候,點擊back則失效了,查找了很多Android 按鍵事件分發和處理機制方面的資料,還是沒弄清楚原因(后面有時間再研究)。于是考慮換一種思路去處理,考慮去重寫Activity中的dispatchKeyEvent方法。public boolean dispatchKeyEvent(KeyEvent event){int keyCode=event.getKeyCode();//Log.e("start",String.valueOf(start));switch(keyCode){case KeyEvent.KEYCODE_BACK:if(event.isLongPress()) //這句很重要,判斷事件是否是長按事件 {AlertDialog.Builder builder = new Builder(MainActivity.this);builder.setMessage("確認退出嗎?");builder.setTitle("提示");builder.setPositiveButton("確認",new DialogInterface.OnClickListener(){public void onClick(DialogInterface dialog,int which){dialog.dismiss();MainActivity.this.finish();System.exit(0);}});builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog,int which) {dialog.dismiss();}});builder.create().show();return true;}return super.dispatchKeyEvent(event); //如果不是長按,則調用原有方法,執行按下back鍵應有的處理default:break;}return super.dispatchKeyEvent(event);}最后通過重寫dispatchKeyEvent方法實現了長按back鍵退出程序,而且沒有屏蔽掉原有的非長按back鍵功能。
轉載于:https://www.cnblogs.com/dolphin0520/archive/2012/08/05/2623763.html
總結
以上是生活随笔為你收集整理的Android 关于长按back键退出应用程序的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: book: Effective Java
- 下一篇: Android访问网络系列之--访问图片