안드로이드 개발 정보
(글 수 1,064)
안녕하세요.
안드로이드에서 Wifi를 이용해서 Location 서비스가 되는가?
검색을 해 보면 된다고 되어 있습니다.
그러면, 내가 만든(빌드한) 안드로이드 OS에서도 되나?
검색해 보면 안되다는 글이 좀 볼 수 있습니다.
제가 찾은 글 중에는 드로이드 폰이 구매할 때는 되었는데, 이미지 만들어서 올려 보았더니 안되더라...
이런 내용도 있었습니다.
아무튼, 이쪽 정보를 찾아보아야 할 필요가 생겨서 찾아본 것입니다.
http://www.netmite.com/android/mydroid/frameworks/base/location/java/com/android/internal/location/NetworkLocationProvider.java
위 링크에 보면, NetworkLocationProvider.java의 소스가 있습니다.
그런데, 안드로이드 1.6 OS의 소스를 보면,
frameworks/base/location/java/com/android/internal/location/
이 위치를 보면 위 파일이 없습니다.
어디 다른 위치로 바뀐 것인지는 모르지만, 저 파일이 없으므로 지원이 안되는 것이 아닌가 추측해 봅니다.
아무튼 소스를 보면,
public class NetworkLocationProvider extends LocationProviderImpl {
private static final String TAG = "NetworkLocationProvider";
.. 중략 ...
public static boolean isSupported() {
// This class provides a Google-specific location feature, so it's enabled only
// when the system property ro.com.google.enable_google_location_features is set.
if (!SystemProperties.get("ro.com.google.enable_google_location_features").equals("1")) {
return false;
}
// Otherwise, assume cell location should work if we are not running in the emulator
return !SystemProperties.get("ro.kernel.qemu").equals("1");
}
isSupported 함수에서 "ro.com.google.enable_google_location_features" 를 체크하고 있습니다.
http://nextinnovation.org/doku.php?id=android_starting
에 보면,
The init.goldfish.rc file
# enable Google-specific location features,
# like NetworkLocationProvider and LocationCollector
setprop ro.com.google.enable_google_location_features 1
로 들어가 있다고 합니다.
확인해 보니까 제대로 들어가 있습니다.
"ro.kernel.qemu" 이 값은 에뮬레이터 인지를 확인 하는것으로 보입니다.
http://www.anddev.org/advanced_networking_with_android-linux-t155.html
링크에보면 sh 파일에서 설정해거나 이 값에 따라 다르게 동작 시키는 것을 볼 수가 있습니다.
그런데, 다운로드한 공개 OS 소스에는 NetworkLocationProvider 부분에 대한 소스가 없고
http://www.mobilespeedia.com/sony-ericsson-xperia-x10-with-android-donut-1-6-launched-today/
소니에릭슨의 Xperia X10 의 스팩을 보면,
Preloaded applications
- Sony Ericsson Timescape™
- Sony Ericsson Mediascape
- Sony Ericsson Home with clock widget
- Sony Ericsson Sync
- Android Market™ Client
- Gmail™
- Google Calendar™
- Google Maps™ with Street View
- Google Media Uploader
- Google phone-top search
- Google search widget
- Google Talk™
- Google Voice Search™
- Network Location Provider
- Set-up Wizard
- YouTube™
이렇게 나오고,
http://www.brighthand.com/assets/11404.pdf
모토롤라의 드로이드 폰 스팩을 보아도
GOOGLE MOBILE SERVICES
ANDROID MARKET™
GMAIL™
GOOGLE CALENDAR SYNC™
GOOGLE CONTACT SYNC™
GOOGLE MAPS WITH STREET VIEW™
GOOGLE MAPS™
GOOGLE QUICK SEARCH BOX™
GOOGLE SEARCH BY VOICE™
GOOGLE TALK™
GOOGLE TURN-BY-TURN DIRECTIONS
GOOGLE™ SET-UP
NETWORK LOCATION PROVIDER
이렇게 명시적으로 구글의 서비스를 사용하는 것으로 나와 있습니다.
그리고, 처음의 링크의 소스를 쫒아가다 보면,
내부 소스에서도
http://www.google.com/loc/m/api
이 쪽으로 데이타를 주고받고 해서 NetworkLocationProvider 가 동작하더군요.
즉, Network Location Provider를 사용하기 위해서 구글의 Maps 처럼 별도 라이센스가 필요한 것으로 보입니다.
감사합니다.
2010.01.12 13:38:21
그렇다면....
http://www.netmite.com/android/mydroid/frameworks/base/location/java/com/android/internal/location/NetworkLocationProvider.java
를 복사해서 내 빌드에 포함하고, isSupported()를 true로 리턴하면 어떻게 될까요?
2010.01.12 20:04:03
평범한건 오픈소스, 좋은건 클로즈 소스
무서운 구글.. ㅠㅠ
그래도 좋은 정보 감사합니다. Wifi location 문제에 대한 확실한 지식을 얻어 갑니다.
구글 검색해 보면, SkyHook 이라는 회사의 SDK를 이용하는 방법도 꽤 나옵니다.
이 회사의 SDK 받아 보면, 사용자명으로 서버에 접속해서 질의 하는 방식으로 동작하더군요.