안드로이드에서 2회 연속 백버튼을 눌러서 앱을 종료시키는 경우가 흔한데, 이 기능은 많이 사용되므로 다음과 같이 별도 클래스로 기능을 분리하면 향후 기능 재사용이 편리하다.
public class BackPressCloseHandler { private long backKeyPressedTime = 0; private Toast toast; private Activity activity; public BackPressCloseHandler(Activity context) { this.activity = context; } public void onBackPressed() { if (System.currentTimeMillis() > backKeyPressedTime + 2000) { backKeyPressedTime = System.currentTimeMillis(); showGuide(); return; } if (System.currentTimeMillis() <= backKeyPressedTime + 2000) { activity.finish(); toast.cancel(); } } private void showGuide() { toast = Toast.makeText(activity, "\'뒤로\'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT); toast.show(); } }
BackPressCloseHandler의 구현은 간단하다.
- backKeyPressedTime은 백버튼이 눌린 마지막 시간을 기록한다.
- onBackPressed() 메서드는 현재 시간이 마지막 백버튼 누른 시간으로부터
- 2초 이상 지났으면, 마지막 백버튼 눌린 시간을 현재 시간으로 갱신하고 showGuide()를 실행한다.
- 2초 이상 지나지 않았으면, Activity를 종료한다.
- 참고로, 2초는 Toast.LENGTH_SHORT의 기본 값이다.
- showGuide() 메서드는 Toast를 이용해서 메시지를 출력한다.
2회 연속 백버튼 누를 때 종료시키고 싶은 Activity가 있다면, 다음과 같이 사용한다.
- BackPressCloseHandler 타입의 backPressCloseHandler 필드를 추가한다.
- onCreate() 메서드에서 BackPressCloseHandler 객체를 생성해서 필드에 할당한다.
- onBackPressed() 메서드에서 backPressCloseHandler.onBackPressed()를 호출한다.
public class HomeActivity extends Activity ... { private BackPressCloseHandler backPressCloseHandler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.home_layout); ... backPressCloseHandler = new BackPressCloseHandler(this); } @Override public void onBackPressed() { backPressCloseHandler.onBackPressed(); } }
'대학 생활 > Android' 카테고리의 다른 글
[Android] java 코드(or 액티비티)에서 string.xml 가져오기 (0) | 2014.06.10 |
---|---|
[Android] Google Maps Android API v2 (구글 맵) 사용하기 (0) | 2014.06.05 |
[Android] dialog 버튼 닫힘 막기 (Builder, AlertDialog) (0) | 2014.06.03 |
[Android] 아이콘 사이즈 (launcher icon size) (0) | 2014.05.30 |