✅ 지속적으로 위치 불러오기
✅ 이동 거리 계산
✅ 이동시간 계산하기
<build.gradle>
implementation 'com.google.android.gms:play-services-location:19.0.1'
<Manifests.xml>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 필요에 의해 사용 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
private fun requestLocationPermission() {
if (ContextCompat.checkSelfPermission(
this,
android.Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this,
arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
LOCATION_PERMISSION_REQUEST_CODE
)
} else {
requestLocationUpdates()
}
}
내 기기에서 위치정보 알려면 google location service API에서 제공하는 FusedLocationProviderClient를 이용해야 한다.

참고
https://chat.openai.com/c/ce3f4bbe-1971-4f14-8d7c-afecca8fec36

역시 ChatGPT3.5 에게 묻고 힌트를 얻었다.

lastLocation 상태
lastLocation != null 이면 조건문 실행
lastLoation == null 이면 lastLocation에 newLocation을 대입
그러면 lastLocation != null이므로 조건문 실행한다.
조건문 내부에서 distanceTo() 메소드 이용하여 거리 구하기
private val mLocationCallback = object : LocationCallback() {
@RequiresApi(Build.VERSION_CODES.O)
override fun onLocationResult(locationResult: LocationResult) {
val newLocation : Location = locationResult.lastLocation
if(lastLocation != null){
val distance = lastLocation?.distanceTo(newLocation)
binding.distance.text = "${distance}m"
}
lastLocation = newLocation
}
}
전역변수 선언 var total_distance : Float = 0.0F
조건문 내부에서
total_distance += distance
ChatGPT에서는 정확한 이동 시간 거리 구하기 답변을 얻지 못해 블로그를 참고하여 이동 시간을 구하였습니다.
전체코드
private val mLocationCallback = object : LocationCallback() {
@RequiresApi(Build.VERSION_CODES.O)
override fun onLocationResult(locationResult: LocationResult) {
val newLocation : Location = locationResult.lastLocation
val newTime = newLocation.time
if(lastLocation != null){
val distance = lastLocation?.distanceTo(newLocation)
val lastTime = lastLocation!!.time
val time = (newTime-lastTime!!)/1000
distance?.let{
total_distance += distance
}
total_time += time
/* // 변환
var sec = total_time % 60
var min = total_time / 60 % 60
var hour = total_time/3600*/
binding.distance.text = "${distance}m"
binding.time.text = "${time}초"
binding.totalDistance.text ="${total_distance}m"
binding.totalTime.text = "${total_time}초"
}
lastLocation = newLocation
}
}
조건문 내부에서
실제 기기와 연결해서 이동해보며 이동거리와 이동 시간을 측정해보았다.

이동하지 않을 때는 위치 정보 업데이트 하지 않기
➡️ 만보기앱이 실행될때 location update 받기
Google Location Service 처음 이용해 보는데 이해하는데 시간이 조금 걸렸다. 마지막 위치를 받는 것은 간단했지만,
내가 구현하고자 하는 걷기 앱에 걸은 시간과 거리를 측정하려면 location update받아야 하는데 그 부분이 복잡했다. 이걸 해결하는데 2주이상 걸린 듯하다.
공식문서도 보고, 책도 찾아보고, 구글링으로 블로그를 찾아보고, 유튜브에서 영상도 보고, ChatGPT 이용해서 질문도 해보고 다양한 시도를 해보았다.
계속 보고 어떻게 활용되는지 파악해야 한다 아무리 유용한 정보더라도 내가 소화하지 못하면 소용이 없다. 그래서 익숙해질 때까지 사용해야 한다. 다양한 자료들을 수집하긴 했는데 내가 그것을 소화하기까지 아직은 많이 부족한 것 같다.
이해해야 응용할 수 있다. 다른 사람의 코드나 샘플코드를 참고해서 내가 구현하고자 하는 것을 만들어야 하는 데, 이해하지 못한다면 응용이 안 된다. 아직 모든 코드를 다 이해했다고 할 순 없지만 그래도 하나씩 하나씩 구현해보자.