欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 实现点击两次物理按键退出App

程序员文章站 2022-07-28 21:27:15
经常看到很多程序点击一下返回键会显示再按一次退出程,然后连续点击两次返回键就退出程序了。虽然心里对这种功能实现方式有了一种大概想法,但是一直也没有去总结过。(可能是没有时间吧!!)...

经常看到很多程序点击一下返回键会显示再按一次退出程,然后连续点击两次返回键就退出程序了。虽然心里对这种功能实现方式有了一种大概想法,但是一直也没有去总结过。(可能是没有时间吧!!)现在觉得如果项目中加上这个小功能还是很方便的,所以和大家分享两种方式。

方法一:

定义一个boolean型变量用于标示是否退出

    boolean isExit;    

然后重写Activity中的onKeyDown方法

@Override    
public boolean onKeyDown(int keyCode, KeyEvent event) {    
    if (keyCode == KeyEvent.KEYCODE_BACK) {    
        if (!isExit) {    
            isExit = true;    
            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();    
            mHandler.sendEmptyMessageDelayed(0, 2000);    
        } else {    
            Intent intent = new Intent(Intent.ACTION_MAIN);    
            intent.addCategory(Intent.CATEGORY_HOME);    
            startActivity(intent);    
            System.exit(0);    
        }      
        return false;    
    } else {    
        return super.onKeyDown(keyCode, event);    
    }    
} 

根据onKeyDown用到的消息写一个写一个Handler

    Handler mHandler = new Handler() {    

            @Override    
            public void handleMessage(Message msg) {    
                // TODO Auto-generated method stub    
                super.handleMessage(msg);    
                isExit = false;    
            }    

        };    

基本原理,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次按了BACK键,此时isExit的值已为true,则会执行退出的方法。

方法二:

通过重写onBackPressed方法来实现。

// 第一次按下返回键的事件
private long firstPressedTime;
// System.currentTimeMillis() 当前系统的时间
@Override
    public void onBackPressed() {
        if (System.currentTimeMillis() - firstPressedTime < 2000) {
            super.onBackPressed();
        } else {
            Toast.makeText(MainActivity.this, "再按一次退出", Toast.LENGTH_SHORT).show();
            firstPressedTime = System.currentTimeMillis();
        }
    }

注意!!
如果重写onBackPressed()方法时,删掉super.onBackPressed();则app无法通过返回键退出程序。

@Override
public void onBackPressed() {
    // super.onBackPressed(); 如果去掉后无法通过返回键退出程序
}

基本原理:

重写android的返回键点击事件监听方法,第一次按下时弹出Toast提醒用户再按一次退出,然后判断第二次按下的时间与第一次相差时间是否小于2秒,小于则推出程序否则继续弹出提示。