경험의 기록

2021.06.25 - [안드로이드/기본] - [Android] 구글 맵 API 사용하여 지도 사용하기 - (1) 지도 연결하기

 

[Android] 구글 맵 API 사용하여 지도 사용하기 - (1) 지도 연결하기

구글의 맵 API를 사용하면 앱에서 지도를 활용할 수 있다. 2021.06.25 - [안드로이드/기본] - [Kotlin] 안드로이드 권한 (Permission) 체크하기 - 위치정보 사용하기 [Kotlin] 안드로이드 권한 (Permission) 체크..

hanyeop.tistory.com

에서 이어지는 글입니다.

 

 

구글 맵에서

FusedLocationProviderClient 를 사용하면 위치 정보를 받아올 수 있다.

위치 정보를 백그라운드에서 수신하기 위하여 서비스에서 구현하였다.

서비스 구현 코드는 생략하며 깃에서 확인할 수 있다.


FusedLocationProviderClient 

lateinit var fusedLocationProviderClient: FusedLocationProviderClient

를 선언해주고

 

fusedLocationProviderClient = FusedLocationProviderClient(this)

onCreate에서 초기화해준다.

 

정보 요청하기

// 위치 정보 요청하기
    @SuppressLint("MissingPermission")
    private fun updateLocation(isTracking: Boolean) {
        if (isTracking) {
            if (TrackingUtility.hasLocationPermissions(this)) {
                val request = LocationRequest.create().apply {
                    interval = LOCATION_UPDATE_INTERVAL // 위치 업데이트 주기
                    fastestInterval = FASTEST_LOCATION_UPDATE_INTERVAL // 가장 빠른 위치 업데이트 주기
                    priority = LocationRequest.PRIORITY_HIGH_ACCURACY // 배터리소모를 고려하지 않으며 정확도를 최우선으로 고려
                    maxWaitTime = LOCATION_UPDATE_INTERVAL // 최대 대기시간
                }
                fusedLocationProviderClient.requestLocationUpdates(request, locationCallback, Looper.getMainLooper())
            }
        } else {
            fusedLocationProviderClient.removeLocationUpdates(locationCallback)
        }
    }

if는 위치 권한이 동의되었는지 확인하기 위해 별도로 만든 함수의 조건을 판별하기 위해 사용한 것이고,

 

LocationRequest.create()

를 통해 받아온 정보들을

fusedLocationProviderClient.requestLocationUpdates(request, locationCallback, Looper.getMainLooper())

로 넘겨주면 위치정보를 받아와서

locationCallback을 호출한다.

 

priority 속성으로 4가지가 존재한다.

  • PRIORITY_HIGH_ACCURACY : 배터리소모를 고려하지 않으며 정확도를 최우선으로 고려
  • PRIORITY_LOW_POWER : 저전력을 고려하며 정확도가 떨어짐
  • PRIORITY_NO_POWER : 추가적인 배터리 소모없이 위치정보 획득
  • PRIORITY_BALANCED_POWER_ACCURACY : 전력과 정확도의 밸런스를 고려. 정확도 다소 높음

 

private val locationCallback = object : LocationCallback() {
        override fun onLocationResult(result: LocationResult?) {
            super.onLocationResult(result)
            if(isTracking.value!!) {
                result?.locations?.let { locations ->
                    for(location in locations) {
                        addPathPoint(location)
                        Log.d(TAG, "${location.latitude} , ${location.longitude}")
                    }
                }
            }
        }
    }

locationCallback 을 선언해주어

받아온 값을 확인한다.

 

잘 출력되는 것을 확인할 수 있다.

 

기본적인 매커니즘만 설명하였으며 자세한 코드는

 

https://github.com/HanYeop/RunnersHigh

 

HanYeop/RunnersHigh

달리기 기록 앱. Contribute to HanYeop/RunnersHigh development by creating an account on GitHub.

github.com

에서 확인할 수 있다.

 

 

 

 

 

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading