( 안드로이드 폰에서 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를 종료해주게 됩니다.
'Programming > Android' 카테고리의 다른 글
Android(6) - 이미지 Visible / Invisible (1) | 2016.06.15 |
---|---|
Android(5) - 애플리케이션으로 SMS SEND/RECEIVE (0) | 2016.06.15 |
Android(4) - Android 로딩화면. SplashView 만들기 (0) | 2016.06.15 |
Android(3) - Android 종료 버튼 클릭 시, 애플리케이션 종료 (1) | 2016.06.14 |
Android(2) - 현재 시간 파악하기 (0) | 2016.06.14 |
WRITTEN BY