Android 监听返回键退出程序的两种实现

1、Android 双击返回键退出程序

    思路:用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态。定时器是每次用户按下返回键才去创建。

代码如下:

 

    /**
     * 菜单、返回键响应
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if(keyCode == KeyEvent.KEYCODE_BACK)
        {  
            exitBy2Click();        //调用双击退出函数
        }
        return false;
    }
    /**
     * 双击退出函数
     */
    private static Boolean isExit = false;

    private void exitBy2Click() {
        Timer tExit = null;
        if (isExit == false) {
            isExit = true; // 准备退出
            Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
            tExit = new Timer();
            tExit.schedule(new TimerTask() {
                @Override
                public void run() {
                    isExit = false; // 取消退出
                }
            }, 2000); // 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务

        } else {
            finish();
            System.exit(0);
        }
    }

 

其中onKeyDown()函数可以在菜单栏Source->Override/Implement Methods里找到,双击即可自动添加到代码中。

2、监听返回键,弹出一个退出对话框

Android 如何监听返回键点击事件,并创建一个退出对话框,

防止自己写的应用程序不小心点击退出键而直接退出。

源码如下:

/**监听对话框里面的button点击事件*/
DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener()
{
        public void onClick(DialogInterface dialog, int which)
        {
            switch (which)
            {
            case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序
                finish();
                break;
            case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框
                break;
            default:
                break;
            }
        }
};    
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
        if (keyCode == KeyEvent.KEYCODE_BACK )
        {
//            // 创建退出对话框
//            AlertDialog isExit = new AlertDialog.Builder(this).create();
//            // 设置对话框标题
//            isExit.setTitle("系统提示");
//            // 设置对话框消息
//            isExit.setMessage("确定要退出吗");
//            // 添加选择按钮并注册监听
//            isExit.setPositiveButton("确定",null);
//            isExit.setNegativeButton("取消", listener);
//            // 显示对话框
//            isExit.show();
            
            
            new AlertDialog.Builder(this)
            .setTitle("系统提示") 
            .setMessage("确定要退出吗")
            .setPositiveButton("确定", listener)
            .setNegativeButton("取消", listener)
            .show();

        }
        return false;
}

 

原文地址:https://www.cnblogs.com/recock/p/4284429.html