为了追赶苹果iphone系统的交互方式,现在大部分手机都在模仿苹果,加上app开发者也在模仿苹果应用的交互方式,在APP退出的时候都不是让用户点击了“后退键”就退出。防止用户点错了后退键而造成的用户体检不好因此基本上都会加入二次确认弹窗,挽留一下用户。
目前流行的解决一般分为两种:
一、按一次后退键显示一个对话框决定是否退出
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { //点击了后退键 if(keyCode == KeyEvent.KEYCODE_BACK) { //创建对话框构建器对象 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("温馨提示")//对话框标题 .setMessage("确定要退出么?")//对话框内容 .setIcon(R.drawable.ic_launcher)//对话框图标 .setCancelable(false) //点击对话框之外的部分是否取消对话框 .setPositiveButton("确定", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub finish();//结束当前Activity } }) .setNegativeButton("取消", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub dialog.dismiss();//取消对话框 } }); //生成对话框 Dialog dialog = builder.create(); //显示对话框 dialog.show(); } return super.onKeyDown(keyCode, event); }
二、连续按两次后退键退出,一般两次按键时间间隔为2秒
(1)一般思路方法:
连续点击后退键,判断两次按键时间的差的绝对值是否小于2000(毫秒)
public class MainActivity extends Activity { long timefirst = 0; //一定要是long类型的 long timesecond = 0; boolean isKeyBack = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode==KeyEvent.KEYCODE_BACK) { timesecond = System.currentTimeMillis(); //记录当前按键时间,相当于上一次为第二次按键 if(timesecond-timefirst<2000) //如果两次按键时间小于2000毫秒,结束应用程序 { finish(); } else { Toast.makeText(this, "再按一次退出程序", 1).show(); timefirst = timesecond; //如果不能退出,则当前按键时间设为第一次,下一次为第二次 return true; //屏蔽后退键的效果 return false;也可以 ,只要不让方法执行super.onKeyDown(keyCode, event);即可 } } return super.onKeyDown(keyCode, event); }