问题
我看到网上很多方案都是这样:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
moveTaskToBack(false);
return true;
}
return super.onKeyDown(keyCode, event);
}
但是,我试了一下,并没有什么卵用,具体的原因我还没有深究,有空再具体看看moeTaskToBack()这个方法。
方案
下面说一下可以实现这一效果的方案:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent i= new Intent(Intent.ACTION_MAIN);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addCategory(Intent.CATEGORY_HOME);
startActivity(i);
return true;
}
return super.onKeyDown(keyCode, event);
}
这样就可以实现这一效果!
—2017/3/8更新—
按返回键退至后台,模拟的就是按下home键,android应用默认在我们按下home键时会退至后台!
但是最近遇到一个问题就是,在退至后台之后,我们点击图标,会发现应用重启了,这时点击返回键才会会到退之前的页面!
找到这篇文章,可以解决这一问题:
android点击Home键后,在打开应用,应用会重新启动,而不是恢复到原来状态
在启动的actiivity的onCreate()中加入如下代码即可解决:
if (!isTaskRoot()) {
finish();
return;
}
这句代码我分析,用来判断该Activity是否为任务栈中的根Activity,即启动应用的第一个Activity。
分析:正常情况下:
比如A页面为启动页面,打开B页面,这时按home键,然后再打开app,这时会在栈中会重新创建一个A页面,然后再打开B页面。
如果加上以上的判断代码:
比如A页面为启动页面,打开B页面,这时按home键,然后再打开app,还会new 一个A页面,但是会走if条件语句,这时A页面不是在栈底,所以finish掉,然后就露出下面的B页面了。
再按一次返回键退出应用
private boolean isExit=false;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK) {
if(!isExit) {
isExit = true;
Toast.makeText(this, "在按一次退出程序", Toast.LENGTH_SHORT).show();
new Timer().schedule(new TimerTask() {
@Override
public void run() {
isExit = false;
}
}, 2000);
} else {
finish();
}
}
return false;
}
这样既可实现按两次back键退出应用!