LocationManager 를 통해 GPS, Network의 위치 정보를 얻을 수 있습니다. 위치 정보를 얻는 방법은 LocationManager.getLastKnownLocation() 으로 가장 마지막에 기록된 위치 정보를 가져오거나 LocationManager.requestLocationUpdates() 으로 Listener를 등록하여 위치가 변경될 때마다 이벤트를 받을 수 있습니다.

 

에뮬레이터 GPS 위치 설정

 

에뮬레이터 설정창에서 Location 부분에 먼저 Location 세팅을 해주어야 합니다.

랜덤한 곳을 누르고 save point를 누르면 위치를 저장할 수 있습니다.

이후 set Location 버튼을 누른뒤 에뮬레이터 설정창을 닫습니다.

 

에뮬레이터의 위치정보 갱신

이후 위치 정보를 갱신하기 위해서 LocationManager에 LocationListener를 구현한것과 다른 설정 변수들을 함께 넣어주어야 합니다.

private fun requestLocationUpdates() {
        locationManager = getSystemService(LOCATION_SERVICE) as LocationManager

        locationListener = LocationListener { location ->
            val latitude = location.latitude
            val longitude = location.longitude
            Log.d("activity", "latitude : $latitude, longitude : $longitude")
        }

        locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER,
            1000L,
            10.0F,
            locationListener
        )
    }

위의 코드에는 permission 구현부분이 빠져있지만, 직접 구현하시게 될때는 permission을 구현해 주셔야 합니다.

위에서 requestLocationUpdates 안에 전달해 주어야 하는 변수들은 다음과 같습니다. 

  • Provider: GPS_PROVIDER 또는 NETWORK_PROVIDER 가 될 수 있습니다.
  • minInterval(ms) : 10초로 설정하면 업데이트가 있을 때 최소 10초 간격으로 이벤트를 전달합니다.
  • minDistance(meters) : 설정된 거리만큼의 변화가 있을 때 이벤트를 전달합니다.
  • Listener : Listener 객체를 전달합니다.

위의 메서드를 실행하게 되면 Listener안에 있는 latitude와 longitude에 값이 들어오게 됩니다. 

 

GetLastKnownLocation을 통해서 좌표를 가져오기

위의 방법보다 더 쉬운방법은 getLastKnownLocation 메서드를 사용하는 방법입니다. 

emulator 에서의 getLastKnownLocation 는 gps가 한번이라도 활성화 되면 가져올 수 있는 값입니다

 

즉, emulator에서 gps값을 가지고 오려면 최소한 requestLocationUpdate 를 먼저 실행 해 준뒤 getlastLocation 을 실행해 주어야 정상적으로 작동하게 되어있습니다.

 

이 방법의 단점은, 기기가 마지막으로 가지고 있는 위치가 현재 위치와 확연히 다를 수 있다는 점이 있습니다. 

private fun getLastLocation() {
        val location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
        if (location != null) {
            homeViewModel.setMyLocation(location.latitude, location.longitude)
        }
    }

 

 

위의 메서드들의 주의사항

 

GPS 위치 값 가져오기는 callBackListener 를 통해서 돌아옵니다, 또한 network 모듈보다 빠르게 동작합니다. 그렇기 때문에 현재 좌표를 통해서 api와 통신을 하게 되는 코드를 작성하신다면, 코드 작동 순서에 주의해야 합니다

 

Android - GPS, Network 위치 정보 얻기 (LocationManager)

LocationManager를 통해 GPS, Network의 위치 정보를 얻을 수 있습니다. 위치 정보를 얻는 방법은 LocationManager.getLastKnownLocation()으로 가장 마지막에 기록된 위치 정보를 가져오거나 LocationManager.requestLocatio

codechacha.com

 

728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기