글
MobileApp 2011/06/11 23:55Phonegap에서 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();
}
'MobileApp' 카테고리의 다른 글
| iOS HostName(URL)을 기반으로 현재 디바이스의 네트워크 상태를 얻기위한 메소드 (0) | 2011/10/25 |
|---|---|
| Phonegap에서 Geolocation 관련 API를 사용할때 . . (0) | 2011/06/11 |
| iScroll을 이용하여, 특정 영역만 스크롤이 가능하게 해보자. (0) | 2011/04/07 |
| Phonegap을 이용하여, Webapp 개발시 . . (0) | 2011/03/11 |
| dojox.mobile (2) | 2011/02/17 |
| jQuery Mobile alpha3이 release (0) | 2011/02/07 |
RECENT COMMENT