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
'App Programming > Android Studio' 카테고리의 다른 글
[Android Studio] SQLite 테이블 데이터 존재 여부 확인 (0) | 2023.04.19 |
---|---|
[Android Studio] 웹뷰 줌 (Zoom) 설정 (0) | 2023.04.17 |
[Android Studio] 앱 아이콘 변경 (0) | 2023.03.14 |
[Android Studio] 앱 이름 변경 (0) | 2023.03.14 |
[Android Studio] 웹뷰 (WebView) (0) | 2023.02.23 |