文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-06 07:27

关注

思路: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); 
      } 
    } 
  } 

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

您可能感兴趣的文章:React Native中Android物理back键按两次返回键即退出应用Android Back键点击两次退出应用详解及实现方法总结Android实现长按back键退出应用程序的方法Android 双击Back键退出应用的实现方法


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯