Android实现点击两次BACK键退出应用

思路:Android中捕获用户按键是在onKeyDown方法中,只需要判断用户按键是否是KEYCODE_BACK即后退键即可,剩下的即为判断两次点击BACK键时间间隔问题了。

第一种实现方式:

  package com.example.clickexittest; 

  import android.app.Activity;
  import android.os.Bundle;
  import android.os.Handler;
  import android.os.Message;
  import android.util.Log;
  import android.view.KeyEvent;
  import android.widget.Toast; 

  public class MainActivity extends Activity { 

    private static final String TAG = MainActivity_Exit.class.getSimpleName(); 

    // 定义一个变量,来标识是否退出
    private static boolean isExit = false; 

    private static Handler mHandler = 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 true;
      }
      return super.onKeyDown(keyCode, event);
    } 

    private void exit() {
      if (!isExit) {
        isExit = true;
        Toast.makeText(getApplicationContext(), "再按一次后退键退出程序",
            Toast.LENGTH_SHORT).show();
        // 利用handler延迟发送更改状态信息
        mHandler.sendEmptyMessageDelayed(0, 2000);
      } else { 

        Log.e(TAG, "exit application"); 

        this.finish();
      }
    }
  }

在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在 Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此时isExit的值已为 true,则会执行退出的方法。

第二种实现方式:

  package com.example.clickexittest; 

  import android.app.Activity;
  import android.os.Bundle;
  import android.util.Log;
  import android.view.KeyEvent;
  import android.widget.Toast; 

  public class MainActivity extends Activity { 

    private static final String TAG = MainActivity.class.getSimpleName(); 

    private long clickTime = 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 true;
      }
      return super.onKeyDown(keyCode, event);
    } 

    private void exit() {
      if ((System.currentTimeMillis() - clickTime) > 2000) {
        Toast.makeText(getApplicationContext(), "再按一次后退键退出程序",
            Toast.LENGTH_SHORT).show();
        clickTime = System.currentTimeMillis();
      } else {
        Log.e(TAG, "exit application");
        this.finish();
  //     System.exit(0);
      }
    }
  }

判断用户两次按键的时间差是否在一个预期值之内,是的话直接直接退出,不是的话提示用户再按一次后退键退出。

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

(0)

相关推荐

  • Android实现长按back键退出应用程序的方法

    本文实例讲述了Android实现长按back键退出应用程序的方法.分享给大家供大家参考.具体分析如下: 最近在做一个Android上的应用,碰到一个问题就是如何实现长按back键退出应用程序.在网上查找了很多资料,发现几乎没有这样的实现,大部分在处理时是双击back键来退出应用程序.参考了一下双击back键退出应用程序的代码,网上主流的一种方法是下面这种方法,实现起来比较简单: @Override public boolean onKeyDown(int keyCode, KeyEvent ev

  • React Native中Android物理back键按两次返回键即退出应用

    前言 本文主要给大家介绍了关于React Native中Android物理back键按两次返回键就会退出应用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 话不多说,直接上图: 测试代码 第16~22行 设置事件监听以及移除事件监听. componentWillMount(){ BackAndroid.addEventListener('hardwareBackPress', this.onBackAndroid); } componentWillUnmount()

  • Android Back键点击两次退出应用详解及实现方法总结

    思路:Android中捕获用户按键是在onKeyDown方法中,只需要判断用户按键是否是KEYCODE_BACK即后退键即可,剩下的即为判断两次点击BACK键时间间隔问题了 第一种实现方式 package com.example.clickexittest; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import andr

  • Android 双击Back键退出应用的实现方法

    Android 双击Back键退出应用的实现方法 实现原理: 双击退出程序的原理无非就是设置一个退出标识(询问是否退出),如果改变了这个标识(确认退出),则再次点击时立马退出,如果规定时间内没有退出,则延时重置这个标识(不退出). 延时重置: 使用 Java API 提供了 Timer 类,它能够执行定时任务.利用 Timer 就能够对标识进行延时重置. Timer 对象的 schedule( ) 方法需要一个 TimerTask 对象和一个时间长度(毫秒)作为参数.TimerTask 对象需要

  • Android实现点击两次BACK键退出应用

    思路:Android中捕获用户按键是在onKeyDown方法中,只需要判断用户按键是否是KEYCODE_BACK即后退键即可,剩下的即为判断两次点击BACK键时间间隔问题了. 第一种实现方式: package com.example.clickexittest; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import an

  • Android实现点击两次返回键退出

    在做安卓应用是我们经常要判断用户对返回键的操作,一般为了防止误操作都是在用户连续按下两次返回键的时候提示用户是否退出应用程序. 第一种实现的基本原理就是,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法. 在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在Handler中将此值还原成false.如果在发送消息间隔的2秒内,再次按了BACK键,则再次执行exit方法,此时

  • android PopupWindow点击外部和返回键消失的解决方法

    刚接手PopupWindow的时候,我们都可能觉得很简单,因为它确实很简单,不过运气不好的可能就会踩到一个坑: 点击PopupWindow最外层布局以及点击返回键PopupWindow不会消失 新手在遇到这个问题的时候可能会折腾半天,最后通过强大的网络找到一个解决方案,那就是跟PopupWindow设置一个背景 popupWindow.setBackgroundDrawable(drawable),这个drawable随便一个什么类型的都可以,只要不为空. Demo地址:SmartPopupWi

  • Flutter 点击两次退出app的实现示例

    目录 1.App组件 2.InAppWebview组件 在安卓手机上才会有物理返回键,而ios手机是没有的,所以说这个是安卓手机独有的功能. 使用场景:当用户在某一段时间内连续点击两次返回键,才会被认为是退出应用. 在Flutter中想实现这个功能,首先我们先来认识一个Flutter中的组件WillPopScope,在Flutter中我们是用这个组件来实现物理返回键拦截的,从而实现点击两返回键退出应用. onWillPop是他的一个回调函数,当用户点击返回按钮时被调用(Android物理返回按钮

  • Android 实现按两次返回键退出程序(两种方法)

    Android 实现按两次返回键退出程序(两种方法) 第一种方法: // 是否退出程序 private static Boolean isExit = false; // 定时触发器 private static Timer tExit = null; 第二种方法: public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (isExit == false) {

  • Android应用第一次安装成功点击“打开”后Home键切出应用后再点击桌面图标返回导致应用重启问题的解决方法

    if((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0){ finish(); return; } 应用程序入口Activity的onCreate方法中加入上面的判断,完美解决应用程序多次重启问题. 应用程序入口Activity的onCreate方法中加入上面的判断,在setcontentview方法之前调用. 以上所述是小编给大家介绍的 Android应用第一次安装成功点击"打开"后Ho

随机推荐