마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Kotlin Location 반복 호출 시, 위도 경도가 고정돼서 뜹니다.

0 추천

GPS 기능 사용을 위해 다음과 같이 권한 확인을 하고

lastLocation 메소드를 통해 위치정보를 가져온 후

딜레이를 걸어 반복 호출을 시켰는데..

이동을 해도 위도경도가 계속 동일하게 뜹니다ㅜㅜ

신기한건 네이버 지도를 켰다가 다시 앱을 들어가보면 위치가 바껴요.. 왜이럴까요?

도와주실 공유 남주혁 강동원 계신가요??

(해당 프로젝트 깃 주소입니다)

https://github.com/theStoryOfBlue/LocationPractice.git

import android.Manifest
import android.content.pm.PackageManager
import android.location.Location
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.lifecycle.lifecycleScope
import com.example.locationpractice.databinding.ActivityMainBinding
import com.google.android.gms.location.FusedLocationProviderClient
import com.google.android.gms.location.LocationServices
import kotlinx.coroutines.delay

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding
    var count = 0


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        Location()
    }

    fun Location() {
        Log.e(javaClass.simpleName, "Location start : ",)
        lifecycleScope.launchWhenCreated {
            while (true) {
                count++
                val fusedLocationClient: FusedLocationProviderClient =
                    LocationServices.getFusedLocationProviderClient(application)

                if (ActivityCompat.checkSelfPermission(
                        application,
                        Manifest.permission.ACCESS_FINE_LOCATION
                    ) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
                        application,
                        Manifest.permission.ACCESS_COARSE_LOCATION
                    ) != PackageManager.PERMISSION_GRANTED
                ) {
                    Log.e(javaClass.simpleName, "return : ",)
                    return@launchWhenCreated
                }

                fusedLocationClient.lastLocation.addOnSuccessListener { location: Location? ->
                    if (location != null) {
                        val latitude = location.latitude
                        val longitude = location.longitude

                        binding.text.text =
                            "GPS Location Latitude: $latitude, Longitude: $longitude, Couint : $count"

                        Log.e(
                            javaClass.simpleName,
                            "GPS Location Latitude: $latitude" +
                                    ", Longitude: $longitude",
                        )
                    }
                }
                delay(1500L)
            }
        }
    }

}
pupu08 (120 포인트) 님이 2022년 8월 30일 질문

2개의 답변

0 추천
위치 권한으로 사용하신 lastLocation에 대한 설명을 잘 읽어 보시고
requestLocationUpdate를 찾아보시고 또한 이 부분에 대한 설명을 읽어 보시기 바랍니다.

직접 설명을 찾아 적용해봐야 본인 것이 됩니다.
Elan's (760 포인트) 님이 2022년 8월 30일 답변
0 추천
먼저 로케이션 부분은 알야할  부가적인 사항이 많기 때문에 개발자 문서를 많이 참고하세요.

lastKnownLocation은 디바이스 알고 있는 가장 최근의 위치정보입니다. 모바일 디바이스 안에 위치정보를 사용하는 어떤 앱이던 간에 가장 최근에 가져왔던 위치정보를 리턴하는 걸로 압니다. 즉, 이게 님이 원하는 위치정보와 동일하지 않을 수 있다는 겁니다.

따라서 님의 앱이 화면에 떠 있는 동안에 locationmanager를 통해 위치를 업데이트 하지 않는 다면, 님이 말하는 상황이 생길 가능성이 많아 보입니다. 그리고 같은 맥락으로 네이버 지도를 사용했다면 lastknownlocation이 업데이트 되었을 가능성이 높겠죠.

위치 권한을 얻었다면 로케이션을 업데이트하세요. 그래야 좀 더 정확한 위치정보를 가져올 수 있습니다.
spark (227,470 포인트) 님이 2022년 8월 30일 답변
spark님이 2022년 8월 30일 수정
...