본문 바로가기
개발/Android

[Android] google location - 현재 위치 가져오기

by blacktree 2022. 12. 8.
반응형

안녕하세요 

 

앱에 구글 맵을 적용하고 나면 제일 먼저 하게 되는 게 현재 위치 정보를 가져오는 것입니다. 

또는 다른 경우에도 현재 위치 정보가 필요한 경우가 있다. 

 

현재 위치를 가져오는 방법에 대해서 알아보겠습니다. 

 

google location - Permission 설정

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

 

1. google location - 폰에 저장되어 있는 마지막 정보를 가져오기

  1. LocationManager의 getLastKnownLocation(String provider) 이용
  2. 위치정보를 획득하면 Location객체에 담아 반환하고 위치 정보를 얻지 못하면 null을 반환
  3. 주의할 점은 오랫동안 위치정보가 갱신된 적이 없다면 예전 정보가 보일 수 있다. 
  4. 그렇지만 빠른 속도로 현재 위치 정보를 얻을 수 있다.  
fun getCurrentLocation(): Location? {
    val lm = requireContext().getSystemService(Context.LOCATION_SERVICE) as LocationManager
    val c = Criteria()
    var mProvider = lm?.getBestProvider(c, true)
    if (mProvider == null || lm!!.isProviderEnabled(mProvider)) {
        val providerList: List<String> = lm!!.getAllProviders()
        for (provider in providerList) {
            if (lm!!.isProviderEnabled(provider)) {
                mProvider = provider
                break
            }
            return null
        }
    }
    try {
        return lm!!.getLastKnownLocation(mProvider!!)
    }catch (e:Exception){}
    return null
}

 

2. google location - LocationListener로 현재 위치 가져오기

  1. LocationManager의 requestLocationUpdates() 이용
  2. 파라미터
    1. String provider : 위치 정보 제공자
    2. long minTimeMs : LocationListener의 호출 주기, 10000은 10초마다 업데이트를 의미함
    3. float minDistanceM : 변경되는 최소 거리 값 , 10.0f은 10미터 변경될 때마다 업데이트를 의미함
    4. LocationListener listener : LocationListener
fun setLocationUpdates(){
    val lm = requireContext().getSystemService(Context.LOCATION_SERVICE) as LocationManager
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 10.0f, locationListener)
}
val locationListener = object : android.location.LocationListener {
    override fun onLocationChanged(location: Location) {
        // 위치가 변경되었을 때 호출됩니다.
        val latitude = location.latitude
        val longitude = location.longitude
    }

    override fun onLocationChanged(locations: MutableList<Location>) {
        super.onLocationChanged(locations)
        //위치가 변경되어 위치가 일괄 전달될 때 호출됩니다.
    }
    override fun onProviderDisabled(provider: String) {
        super.onProviderDisabled(provider)
        // 사용자가 GPS를 끄는 등의 행동을 해서 위치값에 접근할 수 없을 때 호출됩니다.
    }

    override fun onProviderEnabled(provider: String) {
        super.onProviderEnabled(provider)
        // 사용자가 GPS를 on하는 등의 행동을 해서 위치값에 접근할 수 있게 되었을 때 호출됩니다.
    }

    override fun onFlushComplete(requestCode: Int) {
        super.onFlushComplete(requestCode)
        //플러시 작업이 완료되고 플러시된 위치가 전달된 후 호출됩니다.
    }
}

 

 

 

google location - 구글 맵에 적용 방법 - API 키 발급 및 적용

 

[Android] Google Maps API - 사용하기 1

안드로이드에서 구글맵을 사용하기 위해서는 Google Maps API에 등록을 해야 합니다. 우선 구글맵 사용하기 전에 Google Maps API를 등록하는 방법부터 확인해보겠습니다. 목차 프로젝트 만들기 API 라이

blacktrees.tistory.com

 

 

[Android] Google Maps API - 사용하기 2

[Android] Google Maps API - 사용하기 1 안드로이드에서 구글맵을 사용하기 위해서는 Google Maps API에 등록을 해야 합니다. 우선 구글맵 사용하기 전에 Google Maps API를 등록하는 방법부터 확인해보겠습니

blacktrees.tistory.com

728x90
반응형

댓글