Android中实现点击两次返回键退出程序的效果

来源:互联网 发布:网络电影大卖的排名 编辑:程序博客网 时间:2024/05/20 22:36
第一种办法

响应Activity的 onKeyUp事件,两次点击时间大于2秒钟就不响应,小于2秒钟就退出程序
代码:

//记录用户首次点击返回键的时间private long firstTime = 0;

/**
* 第一种解决办法 通过监听keyUp
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
long secondTime = System.currentTimeMillis();
if (secondTime - firstTime > 2000) {
Toast.makeText(MainActivity.this, “再按一次退出程序”, Toast.LENGTH_SHORT).show();
firstTime = secondTime;
return true;
} else {
System.exit(0);
}
}

    return super.onKeyUp(keyCode, event);}第二种办法

和第一种办法一样,这不过这次响应onKeyDown事件
代码:

/**
* 第二种办法
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
long secondTime = System.currentTimeMillis();
if (secondTime - firstTime > 2000) {
Toast.makeText(MainActivity.this, “再按一次退出程序”, Toast.LENGTH_SHORT).show();
firstTime = secondTime;
return true;
} else {
System.exit(0);
}
}
return super.onKeyDown(keyCode, event);
}

第三种办法

直接重写onBackPressed()方法
代码:

/**
* 第三种方法
*/
@Override
public void onBackPressed() {
long secondTime = System.currentTimeMillis();
if (secondTime - firstTime > 2000) {
Toast.makeText(MainActivity.this, “再按一次退出程序”, Toast.LENGTH_SHORT).show();
firstTime = secondTime;
} else {
System.exit(0);
}

第四种办法通过线程延时的办法实现,借助Timer代码:

/**
* 第四种方法
*/
@Override
public void onBackPressed() {
if (!mBackKeyPressed) {
Toast.makeText(this, “再按一次退出程序”, Toast.LENGTH_SHORT).show();
mBackKeyPressed = true;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mBackKeyPressed = false;
}
}, 2000);
} else {
this.finish();
System.exit(0);
}
}

第五种办法在onKeyUp()方法内使用Timer /** * 第五种办法 * @param keyCode * @param event * @return */@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {    if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {        if (!mBackKeyPressed) {            Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();            mBackKeyPressed = true;            new Timer().schedule(new TimerTask() {                @Override                public void run() {                    mBackKeyPressed = false;                }            }, 2000);            return true;        } else {            this.finish();            System.exit(0);        }    }    return super.onKeyUp(keyCode, event);}第六种办法在onKeyDown()方法内使用Timer

/**
* 第六种办法
* @param keyCode
* @param event
* @return
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if (!mBackKeyPressed) {
Toast.makeText(this, “再按一次退出程序”, Toast.LENGTH_SHORT).show();
mBackKeyPressed = true;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mBackKeyPressed = false;
}
}, 2000);
return true;
} else {
this.finish();
System.exit(0);
}
}
return super.onKeyDown(keyCode, event);
}

0 0
原创粉丝点击