- 인터넷에 널린 유사한 글들을 살짝 수정함.
* 뒤로가기 핸들러 정의
package and.bruce.com.handler; import android.app.Activity; import android.content.pm.ApplicationInfo; import android.support.v4.app.ActivityCompat; import android.widget.Toast; import and.bruce.com.App; /** * 뒤로가기 버튼을 두 번 눌렀을 때 앱을 종료하게 하는 핸들러 */ public class BackPressCloseHandler { private long backKeyPressedTime = 0; private static final long checkInterval = 2000; private Toast toast; private Activity activity; private final static int appFlags = App.getAppContext().getApplicationInfo().flags; private final static boolean isDebug = (appFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0; public BackPressCloseHandler(Activity context) { this.activity = context; } public void onBackPressed() { if (System.currentTimeMillis() > backKeyPressedTime + checkInterval) { backKeyPressedTime = System.currentTimeMillis(); showGuide(); return; } if (System.currentTimeMillis() <= backKeyPressedTime + checkInterval) { toast.cancel(); off(); } } /** * 앱 종료 */ public void off(){ // 어느 Activity 에서든 모든 부모 Activity를 닫을 수 잇다. ActivityCompat.finishAffinity(activity); // 디버그모드가 아닐 경우에만 사용하자 (TODO: 실제로 이 분기가 적용되는지 테스트 해 보자) if(! isDebug){ System.exit(0); // 혹은 android.os.Process.killProcess(android.os.Process.myPid()); 사용 } } /** * 뒤로가기 종료 전 안내 */ public void showGuide() { toast = Toast.makeText(activity, "\'뒤로\'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT); toast.show(); } }
* Activity 클래스의 onCreate() 내에서 초기화
@Override protected void onCreate(Bundle savedInstanceState) { ... // 뒤로가기 버튼 종료 관련 핸들러 backPressCloseHandler = new BackPressCloseHandler(this); ... }
* Activity 클래스에 정의된 이벤트핸들러
/** * 뒤로가기 버튼이 눌렸을 때 최초로 호출되는 메서드 */ @Override public void onBackPressed() { // Navigation Drawer가 열려 있을 경우 닫는다. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); // Navigation Drawer가 닫혀 있을 경우 } else { backPressCloseHandler.onBackPressed(); } }
Subscribe
Login
0 Comments