안녕하세요. 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
}
소스코드를 보면서 이해가 되지 않는 부분은 댓글 또는 방명록에 글을 남겨 주시면 감사하겠습니다.