Android 实现点击两次物理按键退出App
程序员文章站
2022-07-28 21:27:15
经常看到很多程序点击一下返回键会显示再按一次退出程,然后连续点击两次返回键就退出程序了。虽然心里对这种功能实现方式有了一种大概想法,但是一直也没有去总结过。(可能是没有时间吧!!)...
经常看到很多程序点击一下返回键会显示再按一次退出程,然后连续点击两次返回键就退出程序了。虽然心里对这种功能实现方式有了一种大概想法,但是一直也没有去总结过。(可能是没有时间吧!!)现在觉得如果项目中加上这个小功能还是很方便的,所以和大家分享两种方式。
方法一:
定义一个boolean型变量用于标示是否退出
boolean isExit;
然后重写Activity中的onKeyDown方法
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (!isExit) { isExit = true; Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); mHandler.sendEmptyMessageDelayed(0, 2000); } else { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); System.exit(0); } return false; } else { return super.onKeyDown(keyCode, event); } }
根据onKeyDown用到的消息写一个写一个Handler
Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); isExit = false; } };
基本原理,当按下BACK键时,会被onKeyDown捕获,判断是BACK键,首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次按了BACK键,此时isExit的值已为true,则会执行退出的方法。
方法二:
通过重写onBackPressed方法来实现。
// 第一次按下返回键的事件 private long firstPressedTime;
// System.currentTimeMillis() 当前系统的时间 @Override public void onBackPressed() { if (System.currentTimeMillis() - firstPressedTime < 2000) { super.onBackPressed(); } else { Toast.makeText(MainActivity.this, "再按一次退出", Toast.LENGTH_SHORT).show(); firstPressedTime = System.currentTimeMillis(); } }
注意!!
如果重写onBackPressed()方法时,删掉super.onBackPressed();则app无法通过返回键退出程序。
@Override public void onBackPressed() { // super.onBackPressed(); 如果去掉后无法通过返回键退出程序 }
基本原理:
重写android的返回键点击事件监听方法,第一次按下时弹出Toast提醒用户再按一次退出,然后判断第二次按下的时间与第一次相差时间是否小于2秒,小于则推出程序否则继续弹出提示。
上一篇: 静默安装oracle11g
下一篇: IGMP Snooping技术介绍