Bucket Place/Android

[Android] Back button / 2번 Back 버튼 클릭 종료

Cloud Travel 2014. 3. 12. 15:30

안녕하세요. Bucket Place 개발자 Cloud Travel입니다.

이번에는 어플을 개발하면 한 번 검색할까 말까한 2번 백버튼으로 어플리케이션을 종료하는 것을 알아 보도록합시다.

간단하게 소스코드를 보면 모든 것이 이해가 되기때문에 여러가지 말은 하지 않을 것입니다.


public class MainActivity extends Activity {
   
    // define variables for back key : 2 pressed end!
    private boolean isBackKeyPressed = false;             // flag
    private long currentTimeByMillis = 0;                     // calculate time interval
   
    private static final int MSG_TIMER_EXPIRED = 1;    // switch - key
    private static final int BACKKEY_TIMEOUT = 2;      // define interval
    private static final int MILLIS_IN_SEC = 1000;        // define millisecond
    // end of back key variable.
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState,R.layout.activity_main);

    }

    /*
     * onBackPressed function override
     *  - back 1 click : 2번 누르면 종료되게 메세지 출력
     *  - back 2 click : 2번 누르면 종료
     */
    @Override
    public void onBackPressed(){
        if ( isBackKeyPressed == false ){
            // first click
            isBackKeyPressed = true;
           
            currentTimeByMillis = Calendar.getInstance().getTimeInMillis();
            Toast.makeText(this, "\'뒤로\'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();
           
            startTimer();
        }else{
            // second click : 2초 이내면 종료! 아니면 아무것도 안한다.
            isBackKeyPressed = false;
            if ( Calendar.getInstance().getTimeInMillis()
                    <= (currentTimeByMillis + (BACKKEY_TIMEOUT * MILLIS_IN_SEC)) ) {
                finish();
            }
        }
    }
   
    // startTimer : 2초의 시간적 여유를 가지게 delay 시킨다.
    private void startTimer(){
        backTimerHandler.sendEmptyMessageDelayed(MSG_TIMER_EXPIRED, BACKKEY_TIMEOUT * MILLIS_IN_SEC);
    }
   
    private Handler backTimerHandler = new Handler(){
        public void handleMessage(Message msg){
            switch( msg.what ){
                case MSG_TIMER_EXPIRED:{
                    isBackKeyPressed = false;
                }
                break;
            }
        }
    };
    // End of Back method
}


소스코드를 보면서 이해가 되지 않는 부분은 댓글 또는 방명록에 글을 남겨 주시면 감사하겠습니다.