共有两种方法实现此功能
方法一:重写onBackPressed()方法
重写onBackPressed()方法,执行exit()方法,在exit方法中,会首先判断isExit的值,如果为false的话,则置为true,同时会弹出提示,并在2000毫秒(2秒)后发出一个消息,在 Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次按了Back键,则再次执行exit方法,此时isExit的值已为 true,则会执行退出的方法。
public class MainActivity extends AppCompatActivity {
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 void onBackPressed() { exit(); }
private void exit() { if (!isExit) { isExit = true; Toast.makeText(this, "再按一次返回键退出程序", Toast.LENGTH_SHORT).show(); mHandler.sendEmptyMessageDelayed(0, 2000); } else { this.finish(); } }}
|
方法二:判断用户两次按键的时间差
public class MainActivity extends AppCompatActivity {
private long clickTime = 0;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
@Override public void onBackPressed() { exit(); }
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { onBackPressed(); return true; } else { return super.onKeyDown(keyCode, event); } }
private void exit() { if ((System.currentTimeMillis() - clickTime) > 2000) { Toast.makeText(this, "再按一次返回键退出程序", Toast.LENGTH_SHORT).show(); clickTime = System.currentTimeMillis(); } else { this.finish(); } }}
|