欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Back键点击两次退出应用详解及实现方法总结

程序员文章站 2024-03-04 17:24:17
思路:android中捕获用户按键是在onkeydown方法中,只需要判断用户按键是否是keycode_back即后退键即可,剩下的即为判断两次点击back键时间间隔问题了...

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

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!