( 안드로이드 폰에서 Back 키 두 번 눌러서 애플리케이션 종료하기 )


보통 애플리케이션을 실행한 후, 종료할 때에 안드로이드 BACK 키를 2번 눌러서 종료해본 경험이 있으실 것입니다.

안드로이드 첫 포스팅은 애플리케이션 메인화면에서 BACK를 1번 눌렀을 때, 확인 토스트 창을 한 번 띄워서 확인을 한 후, 일정시간 안에 다시 한번 눌렀을 때, 종료하는 부분을 다뤄보겠습니다.


안드로이드 스튜디오를 설치 후, 프로젝트를 생성하여 MainActivity를 띄워 놓았다는 가정 하입니다.

[MainActivity.java]

import android.app.Activity;

import java.util.Calendar;

import android.os.Message;

import android.os.Handler;

import android.widget.Toast;


public class MainActivity extends Activity {

//2번 back누르면 종료시키도록

private boolean flag_BackKey = false;                //BACK KEY가 눌려졌는지에 대한 FLAG 로 사용됩니다.

private long currentTime = 0;                          // Time(Millis) Interval을 계산합니다.

private static final int MSG_TIMER = 1;              // Switch문에서 사용하게 되는 Key값입니다.

private static final int BACKKEY_TIMEOUT = 2;    // Interval을 정의합니다.

private static final int IN_MILLISEC = 1000;        // Millis를 정의합니다.


@Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);


       //back버튼을 두번 누르면 종료되도록 합니다.

    @Override

    public void onBackPressed(){            //BACK키가 눌렸을 때의 함수로 Override하여 사용합니다.

            if ( flag_BackKey == false ){

                // 첫 번째로 클릭했을 경우로, false에서 true로 바꿔줍니다.

            flag_BackKey = true;


            currentTime = Calendar.getInstance().getTimeInMillis();       //Java의 Calendar를 import하여 사용합니다.

            Toast.makeText(this, "\'뒤로\'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();

//Toast는 차후에 설명하겠지만, 첫번째 파라미터 this는 현 수행중인 MainActivity이며, 두번째 파라미터는 출력할 문자열입니다. 세번째 파라미터는 Toast창을 길게 보여줄 것인지, 짧게 보여줄 것인지에 대한 시간 간격으로 SHORT와 LONG 이 있습니다.

            startTimer();

            }else{            //만약 BACKKey의 플래그가 현재 false가 아닌, true 라면 아래를 수행합니다.

                // second click : 2초 이내면 종료! 아니면 아무것도 안한다.

            flag_BackKey = false;

            if ( Calendar.getInstance().getTimeInMillis() <= (currentTime + (BACKKEY_TIMEOUT * IN_MILLISEC )) ) {

                    finish();                //currentTime + 2000 (2초) 이므로, 2초 안에 클릭 했을 때, MainActivity를 종료해주는 부분입니다.

            }

        }

    }


    private void startTimer() {                                    //2초의 시간적 여유를 가지도록 Delay 시킵니다.

        backTimerHandler.sendEmptyMessageDelayed(MSG_TIMER , BACKKEY_TIMEOUT * IN_MILLISEC );

    }


    private Handler backTimerHandler = new Handler(){

        public void handleMessage(Message msg){

            switch( msg.what ){                //msg의 값이 무엇인지 파악하여 만약 MSG_TIMER라면, flag를 다시 false로 해줍니다.

                case MSG_TIMER :{

                    flag_BackKey = false;

                }

                break;

            }

        }

    };


==> 즉, 전체적인 구조를 정리하면, MainActivity. 즉 메인화면에서 BACK키를 한번 누르게 되면 Toast창을 출력 한 후, onBackedPressed 함수를 수행하여 flag를 false->true로 바꿔준 후, startTimer함수를 거쳐서 Handler를 수행하게 됩니다. BACKKEY_TIMEOUT 의 값을 통하여 2초로 Delay를 줄것인지, 그 밖의 임의의 값을 Delay로 줄 수 있습니다. 그 안에 한번 더 BACK Key를 누르게 되면 finish() 를 통해 MainActivity를 종료해주게 됩니다.


WRITTEN BY
SiriusJ

,