Android_按两次返回键退出程序和长按返回键退出程序

以上两个功能主要是参考了一下博客的:

http://blog.csdn.net/chenshijun0101/article/details/7682210

http://blog.csdn.net/winlinking/article/details/6596455

方法一:

按两次返回键退出程序:

Activity:

public class Back2FinishAppActivity extends Activity {
    Exit exit = new Exit();  

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }  

    @Override
      public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
                pressAgainExit();
                return true;
                }    

          return super.onKeyDown(keyCode, event);
      }    

    private void pressAgainExit() {
            if (exit.isExit()) {
                finish();
            } else {
                Toast.makeText(getApplicationContext(), "再按一次退出程序",
                        Toast.LENGTH_SHORT).show();
                exit.doExitInOneSecond();
            }
        }
}  

辅助类Exit.java

private boolean isExit = false;
private Runnable task = new Runnable() {
    @Override
    public void run() {
        isExit = false;
    }
};  

public void doExitInOneSecond() {
    isExit = true;
    HandlerThread thread = new HandlerThread("doTask");
    thread.start();
    new Handler(thread.getLooper()).postDelayed(task, 1000);
}  

public boolean isExit() {
    return isExit;
}  

public void setExit(boolean isExit) {
    this.isExit = isExit;
}  

长按返回键退出程序:

public boolean dispatchKeyEvent(KeyEvent event)
    {
        int keyCode=event.getKeyCode();
        switch(keyCode)
        {
            case KeyEvent.KEYCODE_BACK: {
                 if(event.isLongPress())
                 {
                     this.stopService(intent);
                     System.exit(0);
                     return true;
                 }else
                 {
                     return false;    

                 }
            }
        }
        return super.dispatchKeyEvent(event);    

    }  

方法二:

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.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); 

exitTime = System.currentTimeMillis(); 

} else { 

finish(); 

System.exit(0); 

} 

return true; 

} 

return super.onKeyDown(keyCode, event); 

} 

时间: 2025-01-22 01:43:19

Android_按两次返回键退出程序和长按返回键退出程序的相关文章

app点击返回键不退出,双击返回键退出

直接代码 // 按返回键的时候返回上一页面不退出,goBack()表示返回webView的上一页面 public boolean onKeyDown(int keyCoder, KeyEvent event) { if(!webView1.canGoBack() ){ exit(); return false; } if ( keyCoder == KeyEvent.KEYCODE_BACK) { webView1.goBack(); exit(); return false; } else{

Mybatis 在 insert 之后想获取自增的主键 id,但是总是返回1

记录一次傻逼的问题, 自己把自己蠢哭:Mybatis 在 insert 之后想获取自增的主键 id,但是总是返回1 错误说明: 返回的1是影响的行数,并不是自增的主键id: 想要获取自增主键id,需要通过xx.getId()方法获取,因为在mybatis中指定自增主键id封装到了对象的属性中,所以我们需要在对象中来获取 代码示例如下: <insert id="add" useGeneratedKeys="true" keyColumn="id&quo

对比两个同类型的泛型集合并返回差异泛型集合 ——两个List&lt;类名&gt;的比较

1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam name="T">泛型类型</typeparam> 5: /// <param name="newModel">修改后的数据集合</param> 6: /// <param name="oldModel"&g

Python 字典(Dictionary) has_key()方法-判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false

描述 Python 字典(Dictionary) has_key() 函数用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false. 语法 has_key()方法语法: dict.has_key(key) 参数 key -- 要在字典中查找的键. 返回值 如果键在字典里返回true,否则返回false. 实例 以下实例展示了 has_key()函数的使用方法: #!/usr/bin/python dict = {'Name': 'Zara', 'Age': 7} pri

Android监听返回键、Home键+再按一次返回键退出应用

Android监听返回键需重写onKeyDown()方法 Home键keyCode==KeyEvent.KEYCODE_HOME [java] view plain copy @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //++自定义点击事件 return tru

非返回键方式实现页面的返回功能

本文参考自:1.msdn这篇文章 2.8.1参考自这里(虽然是写的7.x,但是的确是参考自这里) 背景:webview和原生页面进行交互,没法直接调用返回键(因为微软的返回键里面带有参数,无法通过界面元素,捕捉到那个参数.如果采用导航到新页面的方式,则原来的webview界面信息全无). 1.winphone8.0: 方法①:把RootFrame的static去掉 public PhoneApplicationFrame RootFrame { get; private set; } 在想返回的

求解两个序列的所有最长公共子序列(LCSes)

 摘要 本篇博文提供了实现求解所有最长公共子序列的程序实现,并提供输出所有公共子序列的方法解释,需要具备基础知识是求解一个公共子序列的动态规划方法,请自行查阅相关资料. 题目重述 子序列概念:设X=< x1, x2,┅, xm>,若有1≤i1< i2< ┅ <ik≤m,使得Z=< z1, z2,┅, zk> = < xi1, xi2,┅, xik>,则称Z是X的子序列,记为Z<X. 例如: X=<A,B,C,B,D,A,B>, 

条款21:必须返回对象时,别妄想返回其reference

条款21:必须返回对象时,别妄想返回其reference 引用只是对象的一种别名当使用引用的时候,请确认他的另一个身份在哪? class Rational { public: Rational(int x, int y) : m_x(x), m_y(y){} //返回const是属于类型保护,friend修饰,以后条款详说 friend const Rational operator + (const Rational &lhs, const Rational &rhs) { Ration

原则21:必须返回对象时,别妄想返回其引用

http://www.jianshu.com/p/35f26eea6cb3 Effective C++中第21个原则,因为引用是要指向某已存在的对象的,但如果该对象某一瞬间突然消失了,这个引用被架空了,那就出错了.为了证实这一点作者举了一个有理数相乘的例子.有这个一个有理数类,其中有一个有理数相乘的成员函数,该成员函数返回该有理数类的对象.在此例中该对象是一个本地对象,什么叫本地对象呢?就是一个普通的,局部的对象,它随着作用域的结束而被自动销毁.因为具备这一性质,一旦你把这个函数的返回值赋给某一