티스토리 툴바


블로그 이미지
카라크라스

Leon.Kim의 공부하는 블로그입니다. mail - kalaklas@gmail.com twitter - @kalaklas

Rss feed Tistory
MobileApp 2011/06/11 23:55

Phonegap에서 Geolocation 관련 API를 사용할때 . .

Phonegap에서 Geolocation 관련 API를 사용할때 . .


최근에 phonegap0.9.5.1로 프레임웍을 업데이트 하였더니...

iOS에서는  Geolocation 인터페이스를 이용하여 현재 location 정보를 얻어오는
아래코드가 아무 이상없이 잘 동작하였으나, 안드로이드에서는 갑작스레 동작이 원활이 되지
않았음. 혹시나 API 변경 사항이 있나 문서를 살펴 보았는데도 변동 사항이 없었다.

var self = this;

navigator.geolocation.getCurrentPosition( function(position) {

self._lat = position.coords.latitude;

self._lng = position.coords.longitude;

self.getPositionSuccess(type, destinationAddress);

}); 


직접 안드로이드 phonegap.0.9.5.1.js를 살펴 보니 아래와 같은 코드가 추가 되어 있었다.
동일한 코드로 다양한 플랫폼을 지원한다는 phonegap의 컨셉이 흐릿해진 순간이었다 . .

/**

 * Force the PhoneGap geolocation to be used instead of built-in.

 */

Geolocation.usingPhoneGap = false;

Geolocation.usePhoneGap = function() {

    if (Geolocation.usingPhoneGap) {

        return;

    }

    Geolocation.usingPhoneGap = true;


    // Set built-in geolocation methods to our own implementations

    // (Cannot replace entire geolocation, but can replace individual methods)

    navigator.geolocation.setLocation = navigator._geo.setLocation;

    navigator.geolocation.getCurrentPosition = navigator._geo.getCurrentPosition;

    navigator.geolocation.watchPosition = navigator._geo.watchPosition;

    navigator.geolocation.clearWatch = navigator._geo.clearWatch;

    navigator.geolocation.start = navigator._geo.start;

    navigator.geolocation.stop = navigator._geo.stop;

}; 


위 메소드는 iOS를 위한 phonegap.0.9.5.1.js 에는 존재하지 않는다.
때문에 iOS에서 usePhoneGap() 메소드를 수행하면, 오류가 당연히 발생한다.
결국 아래와 같이 플랫폼별 분기를 시켜줘야 한다 


if(jquery.csob.isAndroid == false){

//Android일때는 ChildBrowser 메소드를 수행할 필요가 없다.

ChildBrowser.install(); 

}else{

/*

Android일때 Geolocation 기능을 사횽하고자 할때 아래 메소드를 수행해줘야 한다.

*/

Geolocation.usePhoneGap();

}



 
TOTAL 16,071 TODAY 59