프로그래밍/안드로이드

[안드로이드] 뒤로 버튼 두번 눌러 종료하기

오치리일상 2017. 8. 15.

 

많은 안드로이드 앱들이 앱 종료시 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() 메소드는 삭제한다. 

 

 

 

 

댓글

💲 추천 글