关闭

各种退出应用程序

153人阅读 评论(0) 收藏 举报

双击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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8629次
    • 积分:143
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档