PhoneGap(폰갭)에서는 anrdoid.app.Activity.onKeyDown() 메소드를 아래와 같이 재정의하여 사용자가 하드웨어 취소키(back키)를 누르면 브라우저의 뒤로가기를 수행합니다.
// com.phonegap.DroidGap.onKeyDown(int, KeyEvent) 메소드
public boolean onKeyDown(int keyCode, KeyEvent event) {
... ...
// If back key
public boolean onKeyDown(int keyCode, KeyEvent event) {
... ...
// If back key
if (keyCode == KeyEvent.KEYCODE_BACK) {
// If back key is bound, then send event to JavaScript
if (this.bound) {
this.appView.loadUrl("javascript:PhoneGap.fireEvent('backbutton');");
}
// If not bound
else {
// Go to previous page in webview if it is possible to go back
if (this.appView.canGoBack()) {
this.appView.goBack();
}
// If not, then invoke behavior of super class
else {
return super.onKeyDown(keyCode, event);
}
}
}
... ...
}
... ...
}
그러나 때로는 사용자가 취소키를 누르면 이전 웹페이지로 이동하지 않고 앱을 종료시키는 것으로 정책을 바꾸고 싶은 경우도 있습니다. (특히나 아이폰을 고려하여 이전버튼을 포함하도록 웹페이지를 디자인한 경우).
폰갭에서는 취소키 동작을 재정의하는 2가지 방법이 있습니다.
1. DroidGap의 onKeyDown 메소드 오버라이딩
DroidGap을 상속받은 Activity에서 onKeyDown 메소드를 오버라이딩해서 백버튼을 적절히 핸들링해줍니다. 아래코드에서는 앱 종료여부를 묻는 확인창을 띄우도록 했습니다.
2. 폰갭 javascript의 'backbutton' 이벤트 재정의(phonegap 0.9.5 이상)
DroidGap을 상속받은 Activity에서 onKeyDown 메소드를 오버라이딩해서 백버튼을 적절히 핸들링해줍니다. 아래코드에서는 앱 종료여부를 묻는 확인창을 띄우도록 했습니다.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
confirmAppExit();
return true;
}
return super.onKeyDown(keyCode, event);
}
private void confirmAppExit() {
AlertDialog.Builder db = new AlertDialog.Builder(this);
db.setTitle(R.string.exit_app_title)
.setMessage(R.string.exit_app_message) // "프로그램을 종료하시겠습니까?"
.setCancelable(true)
.setPositiveButton(android.R.string.ok, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish(); //확인버튼 누루면 앱 종료
}
})
.setNegativeButton(android.R.string.cancel, null)
.show();
}
2. 폰갭 javascript의 'backbutton' 이벤트 재정의(phonegap 0.9.5 이상)
function onLoad() {
document.addEventListener("backbutton", backKeyDown, true);
}
function backKeyDown() {
if (confirm('프로그램을 종료하시겠습니까?')) {
navigator.app.exitApp();
}
}
...
...
<body onload="onLoad()">
단순히 취소키 눌렀을 때 페이지 뒤로가기를 막으려면 아래코드로 충분합니다.
navigator.app.overrideBackbutton(true);
'Android' 카테고리의 다른 글
[안드로이드] 향상된 AsyncTask 공개 (2) | 2011.06.27 |
---|---|
[안드로이드] PhoneGap 앱에서 신뢰할 수 없는 https 웹페이지 로딩하기 (0) | 2011.06.27 |
[안드로이드] PhoneGap 플러그인 실행 메커니즘 (9) | 2011.06.24 |
[안드로이드] 바이트 길이로 사용자 입력을 제한하는 InputFilter (11) | 2010.12.01 |
[안드로이드] 자잘한 팁 모음 (0) | 2010.12.01 |