日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 关于长按back键退出应用程序的实现

發布時間:2024/4/17 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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键退出应用程序的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。