반응형
안녕하세요
앱에 구글 맵을 적용하고 나면 제일 먼저 하게 되는 게 현재 위치 정보를 가져오는 것입니다.
또는 다른 경우에도 현재 위치 정보가 필요한 경우가 있다.
현재 위치를 가져오는 방법에 대해서 알아보겠습니다.
google location - Permission 설정
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
1. google location - 폰에 저장되어 있는 마지막 정보를 가져오기
- LocationManager의 getLastKnownLocation(String provider) 이용
- 위치정보를 획득하면 Location객체에 담아 반환하고 위치 정보를 얻지 못하면 null을 반환
- 주의할 점은 오랫동안 위치정보가 갱신된 적이 없다면 예전 정보가 보일 수 있다.
- 그렇지만 빠른 속도로 현재 위치 정보를 얻을 수 있다.
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로 현재 위치 가져오기
- LocationManager의 requestLocationUpdates() 이용
- 파라미터
- String provider : 위치 정보 제공자
- long minTimeMs : LocationListener의 호출 주기, 10000은 10초마다 업데이트를 의미함
- float minDistanceM : 변경되는 최소 거리 값 , 10.0f은 10미터 변경될 때마다 업데이트를 의미함
- 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 키 발급 및 적용
728x90
반응형
'개발 > Android' 카테고리의 다른 글
[Android] Android Studio Svn 사용하기 - macOS (0) | 2023.01.04 |
---|---|
[Android] Android Studio 테마 변경하는 방법 - 1 (0) | 2022.12.09 |
[Android] java.lang.UnsupportedOperationException: For security reasons, WebView is not allowed in privileged processes (1) | 2022.12.02 |
[Android] Glide 캐시 기능 사용 안하기 (0) | 2022.12.01 |
[Android] view layout width, height 변경 방법 (0) | 2022.11.29 |
댓글