안드로이드폰을 사용하다가 무심결에 터치 버튼이 눌러져서

본의아니게 앱이 종료된 경험을 많은 사람들이 가지고 있을 것이다.

아래 소스는 앱 화면에서 'Back' 버튼을 눌렀을 때,

바로 앱이 종료되는 것이 아니라 종료를 위해서 다시 한번 'Back' 버튼을 눌러달라는 메시지를 띄워준다.

그리고는 지정된 시간(여기서는 2초) 이내에 다시 'Back' 버튼이 눌려지면 실제로 앱에서 빠져나오게 된다.


package com.huikyun.tester;

import java.util.Calendar;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;

public class BackKeyEventActivity extends Activity {
	private static final String TAG = "BackKeyEventActivity";

	private static final int MSG_TIMER_EXPIRED = 1;

	private static final int BACKKEY_TIMEOUT = 2;
	private static final int MILLIS_IN_SEC = 1000;

	private boolean mIsBackKeyPressed = false;
	private long mCurrTimeInMillis = 0;

	@Override
	public void onBackPressed() {
		// super.onBackPressed();

		if (mIsBackKeyPressed == false) {
			mIsBackKeyPressed = true;

			mCurrTimeInMillis = Calendar.getInstance().getTimeInMillis();

			Toast.makeText(this, "종료를 원하시면 다시 한 번 \"Back key\"를 눌러 주시기 바랍니다.", Toast.LENGTH_SHORT).show();

			startTimer();
		} else {
			mIsBackKeyPressed = false;

			if (Calendar.getInstance().getTimeInMillis() <= (mCurrTimeInMillis + (BACKKEY_TIMEOUT * MILLIS_IN_SEC))) {
				finish();
			}
		}
	}

	private void startTimer() {
		mTimerHandler.sendEmptyMessageDelayed(MSG_TIMER_EXPIRED, BACKKEY_TIMEOUT * MILLIS_IN_SEC);
	}

	private Handler mTimerHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			// super.handleMessage(msg);

			switch (msg.what) {
			case MSG_TIMER_EXPIRED: {
				mIsBackKeyPressed = false;
			}

				break;
			}
		}
	};
}


위의 예제를 실행한 후의 화면과 'Back' 버튼을 한번 눌른 상태의 모습...

 
 
Posted by Huikyun