2016. 5. 12. 14:20ㆍmobile/android
뒤로가기를 두번 눌러서 앱을 종료하기
뒤로가기를 한번 눌러서 앱이 종료되면 불편한 점이 종종 있다.
네이티브 앱의 경우는 뒤로가기 버튼이 이전 activity 로 전환되는 것이 기본 동작이다.
하지만 사용자가 임의로 뒤로가기 버튼의 함수를 변경할 수 있다.
뒤로가기 버튼을 별도로 화면에 구성하고 기존에 디바이스 ( 스마트폰 ) 의 뒤로가기 버튼을 종료버튼으로 사용하는 등을 예로 들 수 있겠다.
http://galaxy-note2.wonderhowto.com/how-to/swap-menu-back-buttons-your-samsung-galaxy-note-2-for-easier-left-handed-navigation-0146943/
그래서 뒤로가기 버튼을 종료 기능 또는 뒤로가는 기능의 버튼으로 사람마다 다르게 습관화 되어 있을 수 있다.
뒤로가기 버튼을 뒤로가는 기능으로 많이 사용하던 사람은 이전 화면으로 가기 위해 뒤로가기 버튼을 누를 수 있고 그 때 한번애 앱이 종료된다면 불편할 수 있다.
이 단점을 보완하기 위해서는 여러가지 방법으로 구현할 수 있다.
다이얼로그를 생성해서 진짜 앱을 종료할 것인지 물어보는 방법과 Toast 를 띄워서 한번 더 누르면 종료된다는 것을 알려주는 방법 등이 있겠다.
뒤로가기 버튼을 두번 눌러서 앱을 종료하도록 유도해 보자.
아주 기본적인 기능을 가지고 구현했기 때문에 자세한 소스 설명은 생략한다.
Handler 만들기
먼저 뒤로가기를 두번 눌러서 종료시키는 기능을 별도의 Class 를 만들어서 구현한다.
Class 명은 BackPressCloseHandler 이라고 만들었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 |
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) {
toast.cancel();
Intent t = new Intent(activity, MainActivity.class);
activity.startActivity(t);
activity.moveTaskToBack(true);
activity.finish();
android.os.Process.killProcess(android.os.Process.myPid());
}
}
public void showGuide() {
toast = Toast.makeText(activity, "한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT);
toast.show();
}
} |
cs |
18# ~ 25# : 앱을 종료한다. 필자의 경우 MainActivity로 화면을 전환 후에 종료시킨다. 버전에 따라서 앱을 종료시키는 방법이 다를 수 있으니 주의 해야 한다.
사용하는 방법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 |
public class MainActivity extends AppCompatActivity {
private BackPressCloseHandler backPressCloseHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 뒤로가기 핸들러
backPressCloseHandler = new BackPressCloseHandler(this);
}
@Override
public void onBackPressed() {
backPressCloseHandler.onBackPressed();
}
} |
cs |
11# : 뒤로가기 BackPressCloseHandler 객체를 생성한다.
15# : 뒤로가기 버튼의 함수를 상속받는다.
16# : 뒤로가기 버튼을 실행할 함수를 입력한다. BackPressCloseHandler 의 함수를 호출한다.
'mobile > android' 카테고리의 다른 글
Android OCR 한글 및 영문 인식 Tesseract 오류 정리, 질문, QNA (4) | 2016.12.07 |
---|---|
android 모바일 웹에서 앱 호출 / 앱에서 다른 앱 호출 / javascript 에서 앱 호출 /설치 여부 확인 / (0) | 2016.09.27 |
[완벽] Andorid 화면 전환 시 새로고침 방지 ( reload 방지 ) / 자동 회전 / 화면 회전 / 런타임 변경 처리하기 (0) | 2016.06.14 |
android status bar 색상 변경 / 상태바 색상 변경 / 5.0 롤리팝 , 6.0 마시멜로우 까지 적용 / 머티리얼 적용 (0) | 2016.06.13 |
android 현재 WebView에서 외부 페이지 불러오기 / WebView 새창 띄우지 않기 / WebViewClient (0) | 2016.04.20 |
android webview 에서 카메라 호출 및 사진첩(갤러리) 호출하여 이미지 파일 업로드 하기 (23) | 2016.04.14 |
android html5 스마트폰 카메라와 연결하기, 사진(갤러리) 및 동영상 찍기 예제 ( URL.createObjectURL ) (0) | 2016.04.08 |
android GCM 클라이언트, 서버 완벽 구현 예제 4 [ 서버 셋팅, GCM 설정 ] (121) | 2016.04.07 |
android GCM 클라이언트, 서버 완벽 구현 예제 3 [ 클라이언트 셋팅, GCM 설정 ] (5) | 2016.04.07 |
android GCM 클라이언트, 서버 완벽 구현 예제 2 [ 클라이언트 셋팅, GCM 설정 ] (5) | 2016.04.07 |