各种退出应用程序

来源:互联网 发布:巨人网络估值 编辑:程序博客网 时间:2024/06/13 22:00

双击back键退出

很多程序会用到双击back键退出,其实就是按下事件的响应。

实现思路:onKeyDown()会捕获当前点击事件,如果当前keyCode等于BACK事件值就会执行exit()方法。在exit()方法中,首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在3000毫秒(3秒)后发出一个消息,在Handler中接收到消息后将isExit值还原成false。如果在发送消息间隔的3秒内,再次按了BACK键,则再次执行exit方法,此时isExit的值已为true,则会执行退出程序的方法。


  1. /** 
  2.  * 菜单、返回键响应 
  3.  */  
  4. @Override  
  5. public boolean onKeyDown(int keyCode, KeyEvent event) {  
  6.     // TODO Auto-generated method stub  
  7.     if(keyCode == KeyEvent.KEYCODE_BACK)  
  8.        {    
  9.            exitBy2Click();      //调用双击退出函数  
  10.        }  
  11.     return false;  
  12. }  
  13. /** 
  14.  * 双击退出函数 
  15.  */  
  16. private static Boolean isExit = false;  
  17.   
  18. private void exitBy2Click() {  
  19.     Timer tExit = null;  
  20.     if (isExit == false) {  
  21.         isExit = true// 准备退出  
  22.         Toast.makeText(this"再按一次退出程序", Toast.LENGTH_SHORT).show();  
  23.         tExit = new Timer();  
  24.         tExit.schedule(new TimerTask() {  
  25.             @Override  
  26.             public void run() {  
  27.                 isExit = false// 取消退出  
  28.             }  
  29.         }, 2000); // 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务  
  30.   
  31.     } else {  
  32.         finish();  
  33.         System.exit(0);  
  34.     }  
  35. }  

那么长按back键退出呢?

借鉴网友思路:可以重写onKeyDown方法和onKeyUp方法,计算这执行这两个方法之间的时间间隔,如果大于2s,则认为是长按,从而退出程序;否则,则执行back键原有的响应。但是短按back键时会失效。

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);    }
复制代码

这样就可以解决了。



0 0