본문 바로가기
App Programming/Android Studio

[Android Studio] 뒤로 가기 두 번 눌러 앱 종료하기

by goatlab 2023. 3. 14.
728x90
반응형
SMALL

BackKeyHandler.java

 

import android.app.Activity;
import android.widget.Toast;

public class BackKeyHandler {

    private long backKeyPressedTime = 0;
    private Activity activity;
    private Toast toast;

    public BackKeyHandler(Activity activity) {
        this.activity = activity;
    }

    public void onBackPressed() {
        if (System.currentTimeMillis() > backKeyPressedTime + 2000) {
            backKeyPressedTime = System.currentTimeMillis();
            showGuide();
            return;
        }

        if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {
            activity.finish();
            toast.cancel();
        }
    }

    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();
        }
    }

    public void onBackPressed(double time) {
        if (System.currentTimeMillis() > backKeyPressedTime + (time * 1000)) {
            backKeyPressedTime = System.currentTimeMillis();
            showGuide();
            return;
        }

        if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {
            activity.finish();
            toast.cancel();
        }
    }

    public void onBackPressed(String msg, double time) {
        if (System.currentTimeMillis() > backKeyPressedTime + (time * 1000)) {
            backKeyPressedTime = System.currentTimeMillis();
            showGuide(msg);
            return;
        }

        if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {
            activity.finish();
            toast.cancel();
        }
    }

    private void showGuide() {
        toast = Toast.makeText(activity, "\'뒤로\' 버튼을 한 번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT);
        toast.show();
    }

    private void showGuide(String msg) {
        toast = Toast.makeText(activity, msg, Toast.LENGTH_SHORT);
        toast.show();
    }
}

 

여기서 showGuide()는 사용자가 뒤로 가기 버튼을 눌렀을 때 Toast를 띄어 주는 메소드이다. 그리고 앱을 완전 종료하려면 activity.finish() 다음에 아래 코드를 추가한다.

 

android.os.Process.killProcess(android.os.Process.myPid());

 

MainActivity.java

 

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private BackKeyHandler backKeyHandler = new BackKeyHandler(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onBackPressed() {
        /* 다음 4가지 중 하나 선택 */
        //backKeyHandler.onBackPressed();
        backKeyHandler.onBackPressed("\'뒤로\' 버튼을 한 번 더 누르시면 종료됩니다.");
        //backKeyHandler.onBackPressed(5);
        //backKeyHandler.onBackPressed("5초 내로 한번 더 누르세요", 5);
    }
}

 

finishAffinity()

 

또는 finishAffinity()을 이용하여 모든 액티비티를 종료할 수 있다.

 

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private boolean doubleBackToExitPressedOnce = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onBackPressed() {
        if (doubleBackToExitPressedOnce) {
            finishAffinity(); // 현재 액티비티와 그 이전에 시작된 모든 액티비티 종료
            return;
        }

        this.doubleBackToExitPressedOnce = true;
        Toast.makeText(this, "\'뒤로\' 버튼을 한 번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                doubleBackToExitPressedOnce=false;
            }
        }, 2000); // 2초간 뒤로가기 버튼이 눌리지 않으면 변수 초기화
    }
}

728x90
반응형
LIST