하이브리드앱 개발시 안드로이드 4.0.* 일부 기기에서 select box touch 오류 발생 해결하기

하이브리드앱jquerymobile과 같이 개발하는 경우 jquerymobile css에서 오류가 발생한다.

오류는 일부 안드로이드 기기의 버젼 4.0.* 에서 발생하고 있으며, 발견된 기기는 갤럭시노트1, 갤럭시S2 에서 ICS 4.0.4 에서 발견되었다.


발견된 오류는 select box 에서 터치시 select box가 열리기 않고 앱이 종료되는 문제가 발생했다. 사용한 jquerymboile의 버젼은 1.3.1 이었다.

해당 버젼의 jquery.mobile-1.3.1.css 의 line 3170 의 -webkit-transform: translate3d(0,0,0); 에서 문제를 일으켰다. 

 -webkit-transform: translate3d(0,0,0);  부분을 주석처리후 오류없이 잘 동작을 했다.


해당 부분의 전체 style은 

/* hardware acceleration for smoother transitions on WebKit browsers */

.ui-panel-animate.ui-panel:not(.ui-panel-display-reveal),

.ui-panel-animate.ui-panel:not(.ui-panel-display-reveal) > div,

.ui-panel-animate.ui-panel-closed.ui-panel-display-reveal > div,

.ui-panel-animate.ui-panel-content-wrap,

.ui-panel-animate.ui-panel-content-fixed-toolbar {

-webkit-backface-visibility: hidden;

-webkit-transform: translate3d(0,0,0);

}


이다. 


혹시 하이브리드앱을 개발할때 select box 사용할대 이와 같은 오류가 발생시에 jquerymobile style파일에서 위 부분을 찾아서 주석처리를 해주면 된다.



backbutton 으로 앱종료하기

backbutton 버튼클릭시 앱 종료 처리하기.


기본적으로 backbutton 버튼을 클릭하게 되면, 뒤로가기가 실행된다.

이부분을 앱의 처음화면일 경우 종료메세지가 출력되고 확인후 종료되게 하려면, backbutton 동작을 override 시켜서 처리해야 한다.

이때, 메인activity에서 backbutton 동작을 override 시키면 그 이후 화면에서도 backbutton 기능이 override 되서 동작을 재정의 해줘야 한다.

이부분을 피하기 위해서 메인 이외의 페이지에서는 backbutton override 가 안되게 하면된다.

아래 그 부분에 대한 code 이다. 기본적으로 backbutton의 override는 cordova(phonegap) 프레임워크를 이용해서 처리했다.


1.메인화면(앱실행시 첫화면)

아래 코드로 메인화면에서 backbutton 클릭시 종료여부 확인메세지 출력됨.

document.addEventListener("deviceready", onDeviceReady, true);

function onDeviceReady(){
document.addEventListener("backbutton", onBackKeyDown, true);
}
function onBackKeyDown() {
    navigator.notification.confirm(msg.close, onBackKeyDownMsg, '종료', '취소, 종료');
}
function onBackKeyDownMsg(button){
if(button==2){
navigator.app.exitApp();
}
}

2. sub페이지들에서 backbutton override 없애고, 기본동작 처리하기.
위에서 처럼 device가 load된후에 
navigator.app.overrideBackbutton(false);
이부분을 추가해주면 된다.

document.addEventListener("deviceready", onDeviceReady, true);

function onDeviceReady(){
navigator.app.overrideBackbutton(false);
}


- 안드로이드, android,폰갭,phonegap,cordova, backbutton, 종료기능 -



gcm을 이용한 푸쉬알림 리스트로 보이게 하기

gcm을 이용한 푸쉬 알림 내용을 리스트로 쌓여서 보이게 하기.


gcm으로 푸쉬 알림을 보낼때 상태바에 리스트로 쌓이게 보일려면

notificationManager.notify(0, notification) 에서 첫번째 인자(푸쉬알림순번?)을 메세지 마다 다르게 주면된다.(같은번호일경우 알림메세지를 덮어버린다.)


notificationManager.notify((int)System.currentTimeMillis(), notification)


이렇게 하면 된다.



- android, phonegap, gcm, 푸쉬 알림, notification -