안녕하세요.


안드로이드에서 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 처럼 별도 라이센스가 필요한 것으로 보입니다.

감사합니다.