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); } } }
判断用户两次按键的时间差是否在一个预期值之内,是的话直接直接退出,不是的话提示用户再按一次后退键退出。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!