Using the Location Manager

안드로이드에서의 LocationManager를 통한 위치획득 방식

marojun
marojun’s Android
4 min readNov 27, 2013

--

아래글은 FusedLocationProvider가 나오기전 Making Your App Location Aware이라는 제목으로 구글 개발자 페이지에 LocationManager를 통해위치를 획득하는 방법에 대한 가이드글을 번역한 것입니다.

위치 기능을 사용하려고 하는데 선행작업은 뭐가 있을까?

1. 메니페스트에서 권한 설정을 한다.

GPS권한은 ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION으로 나뉘어 지는데

전자의 경우 GPS만을 통하여 값을 가져오고 후자는 네트워크와 GPS를 모두 이용할 수 있다.

2. LocationManager를 선언한다.

이는 생명주기상 onCreate()와 onStart()에 선언해야한다.

3. 사용할 프로바이더를 설정한다.

일반적으로 프로바이더의 종류는 3가지로 네트워크, GPS, 패시브가 있다.

4. 사용할 각각의 프로바이더의 상태를 체크한 후 가장 상태가 좋은 프로바이더를 선정한다.

5. 프로바이더의 상태를 인증한다.

해당 프로바이더를 사용 못하는 상태면 네트워크 옵션으로 보낼수 있도록 메서드를 콜한다.

6. 프로바이더를 실행한다.

7. 위치정보 결과를 받는다.

8. 위경도를 주소로 보고싶어요!

먼저 아래의 조건이 참일 경우만 지오코딩을 사용하도록한다.

9. LocationManager 해제

생명주기를 생각해보면 LocationManger는 onStop()에 선언하는게 맞다.

알수없는 오류로 인한 종료는 onDestroy()를 타지 않는 경우도 있으며

onPause()의 경우는 백그라운드 상태진입시에도 종료되어질 수 있기때문이다.

10. LocationManager.PASSIVE_PROVIDER의 사용시점은 언제가 좋을까?

왜냐하면 gps와 network로 위치정보를 획득못했다고 바로 패시브의 위치정보값을 사용한다면 사용자가 해당서비스의 위치정보의 신뢰도가 떨어질 수 있기 때문이다.

시점은 이정도가 좋지 않을까 한다.

  1. 최초구동 시 패시브의 위치값이 있다면 그 정보를 노출시킨다.(프로그레스는 계속돌고 있다.) 이후 GPS와 Network로 위치획득을 하면 해당위치로 좌표를 이동시킨다.
  2. 최초구동 시 패시브, GPS, Network모든 프로바이더를 getBetterLocation() 메서드에 넣고 돌린다. (프로그레스는 멈춰있다.)
  3. GPS, Network모든 프로바이더 위치획득 실패 시 리트라이한다. 이때 패시브, GPS, Network모든 프로바이더를 getBetterLocation() 메서드에 넣고 돌린다.
    그러나 해당조건이 없을경우 알럿으로 현재 위치를 잡을수 없다는 메시지와 함께 패시브로 잡았던 위치정보를 사용할지 묻는다.

--

--

marojun
marojun’s Android

전슬마로. KTH, SK Planet, NCSOFT 에서 iOS와 Android를 개발하고 있다. — 안드로이드 개발 그룹 https://www.facebook.com/groups/junsle/