안드로이드에서 위치정보를 가져오기 위해 사용하는 클래스가 LocationManager이다.

Location location = locationManager.getKnowLastLocation(LocationManager.GPS_PROVIDER);


의 형태로 정보를 가져오게 되는데, 앱을 개발하다가 이 API를 이용해서 위치정보를 가져오지 못하는 상황을 계속 접했다.

위치정보를 내놓지 못하는 폰이 '갤럭시S' 였기 때문에 '갤쓰레기!!'라며 속으로 욕하면서 인터넷 검색을 했지만 사람들은

나와 비슷한 반응을 보이며 안된다고 이야기 하고 있었다.


하지만 폰에 설치된 위치정보 서비스를 제공하는 앱들은 위치정보를 정상적으로 가져오고 있었다. 그럼 왜 그런거지?

혹시나 하는 마음에 무선WiFi를 끄고 3G로 접속한 후에 약간의 인터넷 서핑과 위치정보 앱을 가동시켰다. 이렇게 하면, '위치정보가 저장되지 않을까?'라는 기대를 하면서한 시도였다.

그렇게 한 후에 위의 코드를 다시 실행하니까!!

왠걸!

위치정보를 가져오는 것이다. 이런이런!!

다른 폰들도 확인을 해봤다. 처음에는 위치정보를 가져오지 못했었는데, 3G 로 접속해주고 위치정보 앱 실형시켜주니까

그 이후로는 정상적으로 동작한다.


이 위치정보를 가져오기 위해 무선WiFi에 연결한 상태에서 위치정보 앱을 실행시켰을 때는 그 정보를 가져오지 못했는데...

내가 기대한 바를 보란 듯이 외면해주는 안드로이드.



   정리 
 

1. 안드로이드는 오랫동안 꺼져있다가 켜지면 위치정보를 가지고 있지 않다.

2. WiFi만 연결해서는 네트워크를 이용한 위치정보를 가져오지 못한다.

3. GPS를 켜고 위치정보를 가져올떄까지 기다리는 리스너를 통해서 위치정보를 가져올 수는 있다.

4. 내가 구현한 방식 : GPS를 10초동안 동작시켜서 그동안 위치정보를 가져오면 그 정보를 등록하고, 그렇지 않을 경우에는 네트워크 위치정보를 가져와서 사용하도록 만들었다. 오랫동안 GPS 정보를 가져오는 것을 꺼려했다.

5. 문제의 원인 : 그런데 테스트에 사용된 스마트폰들은 개발 이후 꽤 오랜시간을 꺼져있는 상태로 방치되었던 탓에 이런 위치정보 등이 소거된 상태였을 것이다. 내가 만든 방식과 WiFi 에만 연결된 형태로 인해서 위치정보를 가져올 수가 없었다.

6. 조치방법 : 3G를 켜고 인터넷 서핑과 위치정보 서비스를 이용. 개인적인 생각으로는 '3G'만 켜서 잠시 내버려둬도 될 것이다.


  1. help 2013.07.05 18:56 신고

    Location loc = mgr
    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 로 네트워크상 위도 경도를 가져오지 못하는데 어떻게하나요 ? ㅠ

    • 글에 있는 것처럼,
      WiFi만 연결되어 있는 상태로는 네트워크 연결로 위치정보를 가져오지 못합니다.
      통신기지와 네트워크통신을 주고받은 이후에 위치정보를 획득하기 때문에, 한번 네트워크통신(3G, 4G) 을 해주세요.

+ Recent posts