-
[뒤로가기 두번 눌러 종료] 안드로이드 뒤로가기 두번 눌러서 종료하기Android/개발 2018. 10. 26. 21:39
안드로이드 뒤로가기 두 번 눌러서 앱 종료하기
안드로이드는 안드로이드만의 특징 중 하나인 뒤로가기 버튼을 이용하여 앱을 종료할 수 있습니다.
앱을 종료하고 싶으면 간편하게 뒤로가기를 누르면 되죠. 하지만 사용자가 잘못 눌렀는데 앱이 종료된다면 사용자에게는 좋지않은 UX가 될 것입니다. 그래서 예전에는 종료 다이얼로그를 띄워 종료를 확인하는 방법을 많이 썼지만 요즘은 뒤로가기를 한 번 누르면 Toast 메세지가 나오고 한 번 더 누르면 앱이 종료되는 방식을 많이 사용합니다.
그래서 뒤로가기를 두 번 눌렀을때 앱이 종료되는 방법을 알아보도록 하겠습니다!
구현 방법은 변수 하나, 객체 하나 그리고 Override함수인 onBackPressed() 함수에 소스코드 5~6줄만 추가시켜주면 됩니다.
1. 변수와 객체 선언
// 마지막으로 뒤로가기 버튼을 눌렀던 시간 저장
private long backKeyPressedTime = 0;
// 첫 번째 뒤로가기 버튼을 누를때 표시
private Toast toast;- 위 변수와 객체의 용도는 밑에서 설명하겠습니다.
2. onBackPressed() 함수
@Override
public void onBackPressed() {
// 기존 뒤로가기 버튼의 기능을 막기위해 주석처리 또는 삭제
// super.onBackPressed();
// 마지막으로 뒤로가기 버튼을 눌렀던 시간에 2초를 더해 현재시간과 비교 후
// 마지막으로 뒤로가기 버튼을 눌렀던 시간이 2초가 지났으면 Toast Show
// 2000 milliseconds = 2 seconds
if (System.currentTimeMillis() > backKeyPressedTime + 2000) {
backKeyPressedTime = System.currentTimeMillis();
toast = Toast.makeText(this, "\'뒤로\' 버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT);
toast.show();
return;
}
// 마지막으로 뒤로가기 버튼을 눌렀던 시간에 2초를 더해 현재시간과 비교 후
// 마지막으로 뒤로가기 버튼을 눌렀던 시간이 2초가 지나지 않았으면 종료
// 현재 표시된 Toast 취소
if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {
finish();
toast.cancel();
}
}- 끝입니다! 간단하죠?
이렇게만 사용하셔도 되지만 자주 쓰는게 아닌 것들은 바로 구현하려면 생각이 안날때가 있죠.
그래서 저는 BackPressHandler라는 클래스를 하나 만들어 각각의 프로젝트마다 적용합니다.
// 바쁘신 분들은 여기까지만 읽으셔도 됩니다.
3. BackPressHandler.java
package com.imaec.forblog;
import android.app.Activity;
import android.widget.Toast;
/**
* Created by imaec on 2018-10-26.
*/
public class BackPressHandler {
// 마지막으로 뒤로가기 버튼을 눌렀던 시간 저장
private long backKeyPressedTime = 0;
// 첫 번째 뒤로가기 버튼을 누를때 표시
private Toast toast;
// 종료시킬 Activity
private Activity activity;
/**
* 생성자
* @param activity 종료시킬 Activity.
*/
public BackPressHandler(Activity activity) {
this.activity = activity;
}
/**
* Default onBackPressed()
* 2 seconds
*/
public void onBackPressed() {
if (System.currentTimeMillis() > backKeyPressedTime + 2000) {
backKeyPressedTime = System.currentTimeMillis();
showGuide();
return;
}
if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {
activity.finish();
toast.cancel();
}
}
/**
* Toast 메세지 사용자 지정 onBackPressed(String msg)
* @param msg Toast makeText()의 2번째 인자에 들어갈 text
*/
public void onBackPressed(String msg) {
if (System.currentTimeMillis() > backKeyPressedTime + 2000) {
backKeyPressedTime = System.currentTimeMillis();
showGuide(msg);
return;
}
if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {
activity.finish();
toast.cancel();
}
}
/**
* 뒤로가기 간격 사용자 지정 onBackPressed(int time)
* @param time 첫 번째 뒤로가기와 두 번째 뒤로가기 사이 간격, milliseconds 단위
*/
public void onBackPressed(int time) {
if (System.currentTimeMillis() > backKeyPressedTime + time) {
backKeyPressedTime = System.currentTimeMillis();
showGuide();
return;
}
if (System.currentTimeMillis() <= backKeyPressedTime + time) {
activity.finish();
toast.cancel();
}
}
/**
* Toast 메세지 사용자 지정, 뒤로가기 간격 사용자 지정
* onBackPressed(String msg, int time)
* @param msg Toast makeText()의 2번째 인자에 들어갈 text
* @param time 첫 번째 뒤로가기와 두 번째 뒤로가기 사이 간격, milliseconds 단위
*/
public void onBackPressed(String msg, int time) {
if (System.currentTimeMillis() > backKeyPressedTime + time) {
backKeyPressedTime = System.currentTimeMillis();
showGuide(msg);
return;
}
if (System.currentTimeMillis() <= backKeyPressedTime + time) {
activity.finish();
toast.cancel();
}
}
/**
* Default showGuide()
*/
private void showGuide() {
toast = Toast.makeText(activity, "\'뒤로\' 버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT);
toast.show();
}
/**
* Toast 메세지 사용자 지정 showGuide(String msg)
* @param msg Toast makeText()의 2번째 인자에 들어갈 text
*/
private void showGuide(String msg) {
toast = Toast.makeText(activity, msg, Toast.LENGTH_SHORT);
toast.show();
}
}- onBackPressed() 함수가 4개 있지만 필요한 것을 가져다 사용하시면 됩니다.
4. MainActivity.java // BackPressHandler 사용
package com.imaec.forblog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
// BackPressHandler 객체 선언, 할당
private BackPressHandler backPressHandler = new BackPressHandler(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onBackPressed() {
// Default
backPressHandler.onBackPressed();
// Toast 메세지 사용자 지정
backPressHandler.onBackPressed("뒤로가기 버튼 한번 더 누르면 종료");
// 뒤로가기 간격 사용자 지정
backPressHandler.onBackPressed(3000);
// Toast, 간격 사용자 지정
backPressHandler.onBackPressed("뒤로가기 버튼 한번 더 누르면 종료", 3000);
}
}- Override된 onBackPressed() 함수에는 4가지 중 하나의 backPressHandler.onBackPressed() 함수를 사용하시면 됩니다.
- 이상 뒤로가기 두 번 눌러서 앱 종료하는 방법을 알아봤습니다!
모두 경험치 많이 쌓아서 안드로이드 고수가 됩시다!
'Android > 개발' 카테고리의 다른 글
[BottomNavigationView] 안드로이드 BottomNavigationView 아이템 고정 (9) 2018.10.28 [BottomNavigationView] 안드로이드 BottomNavigationView 사용하기 (36) 2018.10.27 [CustomListView] 안드로이드 커스텀 리스트뷰 아이템 클릭 (18) 2017.02.18 [CustomListView] 안드로이드 커스텀 리스트뷰 (2) 2017.02.07 [Jericho] jericho를 이용해 html 파싱 (0) 2017.01.28 댓글