많은 안드로이드 앱들이 앱 종료시 BackKey(뒤로) 버튼을 두번 눌러 종료하는 방식을 사용한다.
물론 '뒤로'버튼 한번으로 종료, 또는 '뒤로' 버튼시 다이얼로그의 종료 확인 버튼을 클릭하여 종료하는 방식도 있다.
하지만 많은 앱들이 '뒤로'버튼을 두번 눌러 종료하는 방법을 선호하는 것 같아 이 방법에 대해 알아본다.
종료할 액티비티에 바로 코딩하는 방법도 있으나 클래스화 하는게 더욱 깔끔해 보인다.
'뒤로' 버튼 클릭시 필요한 기능을 BackPressedForFinish.class 를 만들어 여기에 코딩한다.
* BackPressedForFinish.java
package com.studio572.samplebackpress;
import android.app.Activity;
import android.content.Intent;
import android.widget.Toast;
/**
* Created by Administrator on 2017-08-11.
*/
public class BackPressedForFinish {
private long backKeyPressedTime = 0; // '뒤로' 버튼을 클릭했을 때의 시간
private long TIME_INTERVAL = 2000; // 첫번째 버튼 클릭과 두번째 버튼 클릭 사이의 종료를 위한 시간차를 정의
private Toast toast; // 종료 안내 문구 Toast
private Activity activity; // 종료할 액티비티의 Activity 객체
public BackPressedForFinish(Activity _activity) {
this.activity = _activity;
}
// 종료할 액티비티에서 호출할 함수
public void onBackPressed() {
// '뒤로' 버튼 클릭 시간과 현재 시간을 비교 게산한다.
// 마지막 '뒤로'버튼 클릭 시간이 이전 '뒤로'버튼 클릭시간과의 차이가 TIME_INTERVAL(여기서는 2초)보다 클 때 true
if (System.currentTimeMillis() > backKeyPressedTime + TIME_INTERVAL) {
// 현재 시간을 backKeyPressedTime에 저장한다.
backKeyPressedTime = System.currentTimeMillis();
// 종료 안내문구를 노출한다.
showMessage();
}else{
// 마지막 '뒤로'버튼 클릭시간이 이전 '뒤로'버튼 클릭시간과의 차이가 TIME_INTERVAL(2초)보다 작을때
// Toast가 아직 노출중이라면 취소한다.
toast.cancel();
// 앱을 종료한다.
activity.finish();
}
}
public void showMessage() {
toast = Toast.makeText(activity, "'뒤로' 버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT);
toast.show();
}
}
설명은 위 소스에 주석으로 달아놓았다
다음은 위 BackPressedForFinish 클래스를 생성하여 사용할 메인액티비티이다.
* MainActivity.java
package com.studio572.samplebackpress;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private BackPressedForFinish backPressedForFinish;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// BackPressedForFinish 객체를 생성한다.
backPressedForFinish = new BackPressedForFinish(this);
}
@Override
public void onBackPressed() {
// BackPressedForFinish 클래시의 onBackPressed() 함수를 호출한다.
backPressedForFinish.onBackPressed();
}
}
액티비티에서 BackPressedForFinish 객체 생성 후 onBackPressed() 를 오버라이드 해서 onBackPressed() 메소드를 호출한다..
이 때 onBackPressed() 안에 super.onBackPressed() 메소드는 삭제한다.
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[안드로이드] Intent (인텐트) 에 대해 알아보자 (0) | 2017.08.17 |
---|---|
[안드로이드] Android 6.0 Marshmallow (마시멜로우)에서 권한 처리작업 (0) | 2017.08.16 |
[안드로이드] 키보드 보이기(올리기) / 숨기기(내리기) - android keyboard show/hide (0) | 2017.08.14 |
[안드로이드] 쉐어드 프리퍼런스 저장/불러오기 (Shared Preference) (2) | 2017.08.13 |
[안드로이드] xml selector - 버튼 눌림(클릭) 효과 커스텀하여 만들기 (1) | 2017.08.12 |
댓글