双击退出程序的原理无非就是设置一个退出标识(询问是否退出),如果改变了这个标识(确认退出),则再次点击时立马退出,如果短时间内没有退出,则延时重置这个标识(不退出)。

====================Alarm 机制实现=========================

AlarmActivity.java

public class AlarmActivity extends Activity {
    private static boolean quit = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * 重写 Back 键方法
     */
    public void onBackPressed() {
        if (quit == false) {
            Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
            alarmAtTime();                          //调用计时器
            quit = true;                            //设置退出标识
        } else {
            super.onBackPressed();
            quit = false;
            this.finish();            //退出当前Activity
        }
    }

    /**
     *  Alarm 机制计时器
     */
    private void alarmAtTime() {
        Intent intent = new Intent(this, AlarmReceiver.class);              //启动接收器
        PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);  //设置延迟启动
        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        long delay = System.currentTimeMillis() + 2000;         //取得当前时间,并延迟2秒
        manager.set(AlarmManager.RTC_WAKEUP, delay, pi);        //延迟启动广播接收器
    }

    /**
     *  BroadcastReceiver 广播接收器
     */
    public static class AlarmReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            quit = false;           //重置退出标识
        }
    }
}
AlarmActivity.java

相关文章: