본문 바로가기

소프트웨어/Android/Java/Ndk

ANDROID] Back Key 두번눌러서 끄기



import android.app.Activity;

import android.content.Context;

import android.widget.Toast;


public class BackPressCloseHandler {

private long backKeyPressedTime = 0;

private final long BACKKEY_WAIT_TIME = 2000;

private Toast toast;

private Activity activity;

BackPressCloseHandler(Activity context) {

this.activity = context;

}

public void onBackPressed() {

if( System.currentTimeMillis() > backKeyPressedTime + BACKKEY_WAIT_TIME ) {

backKeyPressedTime = System.currentTimeMillis();

showGuide();

return;

}

if( System.currentTimeMillis() <= backKeyPressedTime + BACKKEY_WAIT_TIME ){

activity.finish();

toast.cancel();

}

}

private void showGuide() {

toast = Toast.makeText(activity, "\'back\'버튼을 한번 더 누르시면 종료됩니다", Toast.LENGTH_SHORT);

toast.show();

}

}



BackPressCloseHandler Class를 등록후 사용한다.


사용하기전에는...


public class Activity extends Activity {


private BackPressCloseHandler bHandler;


protected void onCreate(~~) {

 bHandler = new BackPressCloseHandler(this); //핸들러 객체 생성

...

}


public void onBackPressed() {

bHandler.onBackPressed();

}


}



해주면된다.


주의할점은 onBackPressed 매서드가 만약에 super.onBackPressed() 를 call한다면 BackButton이 눌리면 super class로 먼저 call이되기때문에 백날 bHandler를 해줘봐야 Activity가 super class에서 먼저 finish되고 call된다. 그러니깐 만약 overriding한 onBackPressed 매서드에 super.onBackPressed가 있다면 살포시 주석처리를 해주면 된다.



소스는 http://javacan.tistory.com/235 를 참고하였다.