点击两次退出

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

package com.gaolei.exitdemo;

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

public class MainActivity extends Activity {

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

    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 false;
        }
        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 {
            finish();
            System.exit(0);
        }
    }

}

第二种实现方式,通过记录按键时间计算时间差实现:

package com.gaolei.exitdemo;

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

public class MainActivity extends Activity {

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

    public void exit() {
        if ((System.currentTimeMillis() - exitTime) > 2000) {
            Toast.makeText(getApplicationContext(), "再按一次退出程序",
                    Toast.LENGTH_SHORT).show();
            exitTime = System.currentTimeMillis();
        } else {
            finish();
            System.exit(0);
        }
    }

}

声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息

原文作者: gaolei_xj

原文地址: http://my.eoe.cn/leigo/archive/2146.html

时间: 2024-10-14 07:28:06

点击两次退出的相关文章

android小技巧之点击两次退出活动

通常在主活动中可以设置连击退出程序,下面通过代码来实现这一功能: @Override//按两次back键退出public boolean onKeyDown(int keyCode, KeyEvent event) { //获取按键并比较两次按back的时间大于2s不退出,否则退出 if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { if (System.currentTi

快速点击两次退出应用

@Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            exit();            return false;        }        return super.onKeyDown(keyCode, event);    } public void exit() {        i

android实现点击两次返回键实现退出功能

在使用android平台的app是我们经常会发现点击两次返回键会提示是否退出的功能,下面讲讲此功能是如何实现的(此方法比较简单) 第一种方法是对系统返回键进行监听,定义一个变量记录按键时间,通过计算时间差来实现该功能,代码如下: //退出时的时间private long mExitTime;//对返回键进行监听@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCO

Cocos2dx 3.2键盘监听的打开方式以及点击两次返回退出的实现方法

Cocos2dx 3.2键盘监听的打开方式以及点击两次返回退出的实现方法 首先,在Scene中重载下面两个函数 [cpp] view plaincopy virtual void onKeyPressed(EventKeyboard::KeyCode keyCode, Event* event); virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event); 第一个函数在按下时触发,第二个函数在松开是触发. 然

退出应用程序 按两次退出键

/**  * 退出应用程序 按两次退出键  */ private void exitApp() {  // TODO Auto-generated method stub  // 判断2次点击事件时间  if ((System.currentTimeMillis() - exitTime) > 2000) {   Toast.makeText(this, "再按一次退出摇乾树", Toast.LENGTH_SHORT).show();   exitTime = System.cu

点击返回键退出popupwindow的方法

点击返回键退出popupwindow mPopupWindow.setFocusable(true); 这句非常重要,对背景不会有影响 mPopupWindow.setBackgroundDrawable(new BitmapDrawable()); 然后再设置它的键监听器 mView.setOnKeyListener(onKeyListener); private OnKeyListener onKeyListener=new OnKeyListener() { @Override publi

asp.net中Button按钮点击两次才执行Onclick事件的原因

今天写了一个简单的聊天室,有登录页面和聊天室,当从登录页面跳入到聊天室过后,却发现要点击两次发送按钮才能发送到显示区,然后发送按钮正常运行. 通过不断测试,发现,第一次点击并没有执行点击事件,第二次才执行的点击事件.并且也找到了问题所在.下面用一个简单的小例子来说明: 页面Server_Transfer.aspx: <asp:Button ID="Button1" runat="server" Text="Button" OnClick=&

UITableViewCell点击两次才跳转解决办法

UITableViewCell点击两次才跳转解决办法 今天在使用UITableViewCell的点击跳转功能时,发现要不生效了,需要先点击一下其它的记录,再点击另一条记录才有效,后来仔细比对后发现,原来是使用错了方法了. 本来应该使用下面方法的, -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 结果用成取消选中的方法 -(void)tableView:(UITab

android 返回键两次退出

返回键两次退出 private long exitTime = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){ if((System.currentTimeMillis()-exitTime) > 2000){ Toast.make