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

在做android应用是我们经常要判断用户对返回键的操作,一般为了防止误操作都是在用户连续按下两次返回键的时候提示用户是否退出应用程序。

原理:

监听back键的按下,需要重写onKeyDown()方法,判断两次按下的时差,如果小于2秒,就退出,反之亦然。


第一种:

package com.example.appexitdemo;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.KeyEvent;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }
 private long exitTime = 0;
   
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK) {
   exitByTime();
   return false;
  }
  return super.onKeyDown(keyCode, event);
 }
 public void exitByTime() {
  if ((System.currentTimeMillis() - exitTime) > 2000) {
   Toast.makeText(getApplicationContext(), "再按一次退出程序",
     Toast.LENGTH_SHORT).show();
   exitTime = System.currentTimeMillis();
  } else {
   finish();
   System.exit(0);
  }
 }
 
}

第二种:

package com.example.appexitdemo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;
import android.view.KeyEvent;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }
 // 定义一个变量,来标识是否退出
    private static boolean isExit = false;
   
    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            isExit = false;
        }
    };
   
 @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);
        }
    }
}

下载地址

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。