Android实现双击返回键退出应用实现方法详解

  前言

  现在市面上很多应用都会有当用户按返回键的时候提示用户:再按一次将退出应用的提示,也就是双击双击返回键退出应用,接下来我们就用几种办法来实现这个功能

  效果图

  实现

  第一种办法

  响应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

  */

  @Override

  public 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);

  }

  OK,到此就结束了,原理都差不多。

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  您可能感兴趣的文章: