摘要:本文将带你了解Android应用开发Android 实现点击两次物理按键退出App,希望本文对大家学Android有所帮助。
本文将带你了解Android应用开发Android 实现点击两次物理按键退出App,希望本文对大家学Android有所帮助。
经常看到很多程序点击一下返回键会显示再按一次退出程,然后连续点击两次返回键就退出程序了。虽然心里对这种功能实现方式有了一种大概想法,但是一直也没有去总结过。(可能是没有时间吧!!)现在觉得如果项目中加上这个小功能还是很方便的,所以和大家分享两种方式。
方法一:
定义一个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秒,小于则推出程序否则继续弹出提示。
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号