在很多应用中,我们经常可以看到这样一个功能,在应用的首页,如果你连续两次按返回键,系统提示,然后退出应用。淘宝,zaker等都有这样的功能。那他们是如何实现的呢。
其实主要是对按键事件进行监听,然后调用相应的逻辑处理代码来执行相应的操作。
以下是一个代码实现,供参考。
Activity代码:
主要是在主activity中重写 onKeyDown方法:
private long exitTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
if ((System.currentTimeMillis() - exitTime) > 2000) {
toast("再按一次返回键退出程序");
exitTime = System.currentTimeMillis();
}
else {
//关闭首页
finish();
//完全退出应用
killApp();
}
return true; //返回true表示执行结束不需要继续执行父类按键响应
}
return super.onKeyDown(keyCode, event);
}
其中toast()和killApp()方法是我自己封装的方法。
代码如下:
/*
* killApp() 关闭应用
*
* 参数:无
*
* 返回值:无
*/
public void killApp() {
Process.killProcess(Process.myPid());
}
/*
* toast()提示信息
*/
public void toast (String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
这里还有一种常规的实现,就是在首页按返回键,系统弹出一个退出对话框,点击确定,退出应用。这里也一并给出实现的代码。在onKeyDown方法的if判断逻辑里面调用即可。
/*
* exitDialog() 退出系统对话框
*/
public void exitDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.ExitMessage)
.setCancelable(false)
.setPositiveButton(R.string.Yes,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
killApp(); //退出应用
}
})
.setNegativeButton(R.string.Cancel,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel(); //关闭对话框
}
});
AlertDialog alert = builder.create();
alert.show();
}