使用dispatchKeyEvent双击退出程序

Android系统按键操作最先是在dispatchKeyEvent中进行处理的,然后才是onKeyDown(int keyCode, KeyEvent event)和onKeyUp(int keyCode, KeyEvent event)。

同理,触摸操作也是先在dispatchTouchEvent中进行处理,在分发给onTouchEvent进行处理。

代码很简单,只要掌握好事件的分发顺序就ok了。
Activity中的代码:

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        Log.d("CPACM","onKeyDown");
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        Log.d("CPACM","onKeyUp");
        return super.onKeyUp(keyCode, event);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        Log.d("CPACM","onTouchEvent");
        return super.onTouchEvent(event);
    }

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        Log.d("CPACM","dispatchKeyEvent");
        if(event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
            if(System.currentTimeMillis() - preTime < 2000){//在两秒内,退出

                return super.dispatchKeyEvent(event);
            }
            Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
            //System.exit(0);
            preTime = System.currentTimeMillis();
            return true;
        }
        // TODO Auto-generated method stub
        return super.dispatchKeyEvent(event);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        // TODO Auto-generated method stub
        Log.d("CPACM","dispatchTouchEvent");
        return super.dispatchTouchEvent(ev);
    }

  

时间: 2024-10-14 11:18:16

使用dispatchKeyEvent双击退出程序的相关文章

Android的简单应用(二)——使用dispatchKeyEvent双击退出程序

Android系统按键操作最先是在dispatchKeyEvent中进行处理的,然后才是onKeyDown(int keyCode, KeyEvent event)和onKeyUp(int keyCode, KeyEvent event). 同理,触摸操作也是先在dispatchTouchEvent中进行处理,在分发给onTouchEvent进行处理. 代码很简单,只要掌握好事件的分发顺序就ok了.Activity中的代码: @Override public boolean onKeyDown(

开源中国 OsChina Android 客户端源码分析(10)双击退出程序

在源码中,火蚁完全封装了  双击退出程序的功能 : DoubleClickExitHelper类 该类的源码分析如下: 1  构造函数中传入了 设备上下文,实现退出功能的界面,完成消息处理器的初始化:既然要有提示条,那么也需要一个Toast对象. 2 既然完全封装,那么 我们需要将 按键的事件及按键码传进去,因为界面重写的onKeyDown 事件需要返回一个boolean值,那么在DoubleClickExitHelper类中也自定义了一个返回布尔值的onKeyDown 函数. 3onKeyDo

Android 返回键双击退出程序

/** * 菜单.返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exitBy2Click();// 调用双击退出函数 } return false; } private long exitTime = 0; /** * 双击退出:利用计算时间差实现 */ public void exitBy2Click() { i

实现双击退出程序

boolean doubleBackToExitPressedOnce = false; @Override public void onBackPressed() { if (doubleBackToExitPressedOnce) { super.onBackPressed(); return; } this.doubleBackToExitPressedOnce = true; Toast.makeText(this, "Please click BACK again to exit&qu

Android笔记--两种双击退出程序的方法

首先通过onKeyDown获取当前是否是BACK键.如果是进行下一步. 两种方法其中一种是通过对连续点击back键之间的时间进行判断是否是要退出,另一种是设置一个状态值,通过改变状态值来判断是否是要退出. 1. 1 private long exitTime=0;//根据连续点击之间时间判断 是否退出 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanc

Android 双击返回键退出应用

今天做应用的双击退出效果,使用了网上建议的方法,但是每次都是点击一次就退出了,所以就没有用大家的方法,下面把自己的方法写出来,做一下记录.代码如下: /** 双击退出程序 */ private long mExitTime; @Override public void onBackPressed() { // TODO Auto-generated method stub // super.onBackPressed(); if ((System.currentTimeMillis() - mE

android_双击退出

/** * 设置快速双击退出程序 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == KeyEvent.KEYCODE_BACK) { exitBy2Click(); } return false; } /** * 双击退出函数 zhaoyazhi */ private void exitBy2Click() {

Android基础入门教程——4.1.2 Activity初窥门径

Android基础入门教程--4.1.2 Activity初窥门径 标签(空格分隔): Android基础入门教程 本节引言: 上一节中我们对Activity一些基本的概念进行了了解,什么是Activity,Activity的生命周期,如何去启动一个Activity等,本节我们继续来学习Activity,前面也讲了一个App一般都是又多个Activity构成的,这就涉及到了多个Activity间数据传递的问题了,那么本节继续学习Activity的使用!另外关于传递集合,对象,数组,Bitmap的

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

第一步,定义一个变量,用于记录上一次按返回争键时间 private long lastBackKeyTime; 第二步,重写Activity中onKeyDown方法 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: long delay = Math.abs(System.currentTimeMillis() - las