하이브리드 앱 개발 중 InAppBrowser로 띄운 창에서 휴대폰 뒤로가기 물리버튼을 누를시 어플이 바로 종료되는것이 아니라 종료 여부를 한번 확인 후 종료해주고 싶어 방법을 한참 찾다가 해결해서 같은 문제로 방법을 찾아보셨다면 적용해보세요.
수정해야할 파일은 InAppBrowserDialog.java의 onBackPressed 입니다.
기본적으로 제공되는 파일내용은 아래와 같습니다.
public void onBackPressed () {
if (this.inAppBrowser == null) {
this.dismiss();
} else {
// better to go through the in inAppBrowser
// because it does a clean up
if (this.inAppBrowser.hardwareBack() && this.inAppBrowser.canGoBack()) {
this.inAppBrowser.goBack();
} else {
this.inAppBrowser.closeDialog();
}
}
}
수정된 파일 내용은 아래와 같습니다.
브라우저가 history.back()이 가능한 상황이면 기존과 같이 뒤로가기를 지원해주고
종료되는 상황일시 그냥 종료하는것이 아니라 사용자에게 종료할지 confirm을 받고 종료를 원하면 종료를
취소를 원하면 기존창을 유지하는 것입니다.
파일의 경로는 {Projectname}\platforms\android\app\src\main\java\org\apache\cordova\inappbrowser\InAppBrowserDialog.java 입니다.
public void onBackPressed() {
if (inAppBrowser == null) {
dismiss();
}
else {
// better to go through the in inAppBrowser
// because it does a clean up
if (inAppBrowser.hardwareBack() && inAppBrowser.canGoBack()) {
inAppBrowser.goBack();
} else {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context)
.setTitle("종료 확인")
.setMessage("종료하시겠습니까?")
.setPositiveButton("종료", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
inAppBrowser.closeDialog();
}
})
.setNegativeButton("취소", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
dialog.cancel();
}
});
alertDialogBuilder.create();
alertDialogBuilder.show();
}
}
}
java 파일상단에 import도 추가해주세요
import android.content.DialogInterface;
적용된 화면은 이렇습니다.