【需求分析】
在应用程序中经常会误操作点击返回键退出程序,现在需要连续两次点击返回键才退出程序,否则只是提示
用户当前按下了返回键,再按一次后就退出程序。
【效果展示】
【实现原理】
记录两次Back键按下的时间戳。如果两个时间戳之间的差值在一个设置的阈值范围内(程序中设置为2s)则
退出App,否则弹出一个Toast告知用户当前Back键被按下,再按一次就退出App.
【代码展示】
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
/**
* 功能:两次返回键退出App,第一次按下返回键时弹出Toast提示用户是否退出程序
* 作者:lexli
* 博客:http://blog.csdn.net/csdn_lexli/article
*/
public class MainActivity extends AppCompatActivity {
private long lastPressTime = 0l;
private int timeExpired = 2000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 两次返回键退出App.实现的核心要素:
* 原理:第一次按下返回键时,弹出提示Toast同时记录当时的时间。
* 如果下一次返回键时间与本次间隔在2s内,则退出App,否则
* 继续两次时间间隔检测
* 注意:这里是完全复写onBackPressed方法,不要调用父类的onBackPressed
* 否则按一下返回键就退出了
*/
@Override
public void onBackPressed() {
if (System.currentTimeMillis() - lastPressTime > timeExpired) {
// 两次间隔在expiredTime外,则弹出Toasr提示用户“再按一次退出程序”
Toast.makeText(MainActivity.this, "再按一次退出本程序", Toast.LENGTH_SHORT).show();
lastPressTime = System.currentTimeMillis();
} else {
// 两次间隔在ExpiredTime内,直接退出程序
finish();
}
// 注意,这里不需要调用父类的onBackPressed方法了,否则每次运行到这调用父类的onBackPressed退出程序了
//super.onBackPressed();
}
}