首先通过onKeyDown获取当前是否是BACK键。如果是进行下一步。
两种方法其中一种是通过对连续点击back键之间的时间进行判断是否是要退出,另一种是设置一个状态值,通过改变状态值来判断是否是要退出。
1.通过状态判断。
private static boolean isExit=false;//根据标识判断 是否退出
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
isExit=false;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_BACK){
exit();
return false;
}
return super.onKeyDown(keyCode, event);
}
/*
* 1.定义一个标识是否突出
* */
private void exit(){
if (isExit){
isExit=true;
Toast.makeText(getApplicationContext(),"再点击一次退出",Toast.LENGTH_SHORT).show();
//利用handler延迟发送退出状态
handler.sendEmptyMessageDelayed(0,2000);
}else {
finish();
System.exit(0);
}
}
2.通过handler延迟发送一条信息来改变状态值。
private long exitTime=0;//根据连续点击之间时间判断 是否退出
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_BACK){
exit();
return false;
}
return super.onKeyDown(keyCode, event);
}
/*
根据点击时间判断
*/
private void exit(){
if (System.currentTimeMillis()-exitTime>2000){
Toast.makeText(getApplicationContext(),"再点击一次退出",Toast.LENGTH_SHORT).show();
exitTime=System.currentTimeMillis();
}else {
finish();
System.exit(0);
}
}