본문 바로가기
Android 개발/지도 Api

새로나온 Google Map API 이용해서 내 위치 지도에 표시하기

by Developer88 2017. 8. 1.
반응형

안드로이드 지도 화면 만드는 방법에 대해서 얼마전에 정리해봤었는데요.

최근에, Google Play services SDK 11버전이 나오면서 API가 많이 바뀌었습니다.


새로 나온 API를 이용해서 지도 화면을 생성하는 방법에 대해서 정리해 보겠습니다.


이번 글은 지도 화면이 만들어진 상태에서 내 위치를 지도를 표시하는 방법을 추가하므로,

구글맵 화면을 만드는 것에 대해서는 아래 링크의 글을 참조해주세요.


>>> Google Map API 이용해 지도 화면 만들기 <<<


추가적으로 이전버전과 달라진 점에 대해서는 아래 링크의 1번 글을 봐주시면 됩니다.


>>> 새로나온 Google Map API(ver11) 이용해 내 위치 얻어오기 <<<


그럼 하나씩 구현해 보겠습니다.


1. FusedLocationProviderClient 


먼저 play-service의 location라이브러리를 추가하구요.




제일 먼저, FusedLocationProvideClient의 객체를 생성해서 시작합니다.




이전에는 GoogleApiClient에 connect를 했어야 했는데요.

이제는  mFusedLocationProvideClient에 requestLocationUpdates메소드를 실행해주면 됩니다.



3. createLocationCallback


이번에는 mFusedLocationProvideClient에서, 위치를 받았을 때,

실행할 콜백 메소드를 구현해 주겠습니다.


인자로 주어지는 locationResult로부터 getLastLocation()메소드를 통해서 

위도경도 값을 가지고 있는, 현재위치를 얻어옵니다.




위에서 updateLocationUI()메소드를 호출하였는데요.

이것은 위치를 얻어올경우, 내 위치찾기가 가능하다면, 

내위치찾기 버튼을 보여주기 위함입니다.


아래와 같이 구현해 주었습니다.




4. createLocationRequest


이번에는 LocationRequest 객체를 만들어 보겠습니다.


createLocationRequest()라는 메소드를 만들어서,

위치요청 객체를 만들어서(LocationRequest) 변수에 담고, 

현재 위치를 요청할 때 원하는 간격을 setInterval 메소드로 지정합니다.

이것을 mLocationRequest에 담아서 전달해줍니다.


setPriority는 요청할때 무엇을 중점으로 두느냐인데, 앱에 따라서 위치정확도가 중요한 경우도 있고, 배터리가 소모되지 않도록 할 수도 있는데요,

아래와 같은 옵션들을 사용할 수 있습니다. 우선은 가장 배터리를 많이 소모하지만, 높은 정확도를 보이는 옵션을 선택하였습니다.




5. Google 지도 


이제 지도를 생성하고 화면에 표시하겠습니다.

위에서 생성한 메소드들을 차례차례 호출하고, 

mapFragment에 getMapAsync()메소드를 호출해줍니다.

이전에는 이것을 onConnected에서 해주었었지요.




이제 onMapReady()콜백 메소드에서 구글맵 객체를 받아올 수 있습니다.

여기서, 지도를 받고 나서, 위치관련 권한을 확인해 보겠습니다.




mLocationPermissionGranted라는 변수를 만들어서 권한을 얻어오면 true로 해주겠습니다.

만약 권한이 없다면, getLocationPermission이라는 메소드를 통해서 권한을 얻어오겠습니다.



getLocationPermission메소드는 아래에서 구현하겠습니다.


5. 위치 관련 권한 얻기


getLocationPermission을 구현하기 전에 몇가지 체크해야 하는 것들이 있습니다.

먼저 Manifest에 위치 관련해서, 정의가 되어있는지 확인해야 하구요.




안드로이드6.0부터 얻어야 하는 동적권한 문제도 처리해야 하는데요.

동적 권한 얻기는는 아래 글의 링크를 참조해 주세요.(이 글에서는 제외하겠습니다)

>>> Android 에서 동적 권한 얻기 <<<


getLocationPermission을 아래와 같이 구현해서 권한을 얻었다면,
이제 getCurrentLocation메소드를 실행하도록 해줍니다.



getCurrentLocation메소드를 보기전에,

권한을 요청한후 받는 onRequestPermissionResult는 아래와 같이 구현해줍니다.

showRequestAgainDialog는 권한을 유저가 받지 않기로 한경우, 다이얼로그를 보여주기 위한 메소드입니다.

여기서는 생략하고 넘어가겠습니다.




이제 getCurrentLocation메소드를 아래와 같이 구현해주면 되는데요.
위에서 생성했던, mFusedLocationClient객체에 requestLocationUpdates메소드를 호출하고,
locationRequest객체와 callback그리고, 현재 쓰레드를 의미하는 Looper.myLooper()를 인자로 넣어줍니다.
위치권한이 생성된 상태므로, updateLocationUI()를 통해서,
내 위치버튼이 활성화 되도록 해줍니다.


이제 앱을 구동하면, 내 위치를 지도에서 볼 수 있습니다.



6. 내 위치 지도에 표시하기


마지막으로 내 위치를 지도에 표시하면 되는데요.

내 위치를 받는 콜백메소드에서 표시해주면 되겠습니다.




7. onDestroy에서 콜백 제거


마지막으로 onDestroy에서 콜백을 아래와 같이 제거해 주겠습니다.


728x90

댓글