728x90
반응형
Google Play 서비스의 위치 API를 사용해 사용자의 현재 위치를 가져올 수 있도록 도와주는 위치 서비스 객체
GPS, Wi-Fi, 셀룰러 네트워크 등 다양한 수단을 조합해서 가장 효율적인 방식으로 사용자의 위치를 자동으로 결정
특징
- 배터리 절약
- 기존 방식인 LocationManger를 사용하는 방식보다 전력 소모가 적음
- Google이 자동으로 최적의 위치 제공 방식을 선택해준다.
- 정확한 위치 제공
- GPS, Wi-Fi, 셀룰러 네트워크 등 여러 기술을 자동으로 조합하여 가장 정확한 위치 정보를 가져옴
- 비동기 방식
- 백그라운드에서도 위치 요청 가능
- 콜백(LocationCallback)을 통해 위치 업데이트를 받는다
- onLocationResult()에서 위치 데이터를 처리
사용 방법
객체 생성
private val fusedLocationClient = LocationServices.getFusedLocationProviderClient(activity)
최근 위치 가져오기 (getLastLocation())
fusedLocationClient.lastLocation
.addOnSuccessListener { location ->
if (location != null) {
Log.d("Location", "위도: ${location.latitude}, 경도: ${location.longitude}")
} else {
Log.e("Location", "최근 위치 정보를 가져올 수 없음")
}
}
최근 위치 정보가 캐시되어 있으면 빠르게 반환
앱이 실행된 후 처음으로 위치를 요청한 경우 null이 반환될 가능성이 높음
실시간 위치 업데이트 (requestLocationUpdates())
val locationRequest = LocationRequest.Builder(0L) // 즉시 한 번만 업데이트
.setMaxUpdates(1) // 위치를 한 번만 가져옴
.build()
val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
locationResult.lastLocation?.let {
Log.d("Location", "위도: ${it.latitude}, 경도: ${it.longitude}")
}
}
}
fusedLocationClient.requestLocationUpdates(
locationRequest,
locationCallback,
Looper.getMainLooper()
)
- LocationRequest.Builder(0L) → 즉시 한 번만 위치 요청
- setMaxUpdates(1) → 한 번만 요청 후 자동 종료
- requestLocationUpdates() → 위치 정보를 요청하고 콜백을 통해 받음
FusedLocationProviderClient와 LocationManager의 차이
FusedLocationProviderClient | LocationManager | |
출시 버전 | Android 2.3 (API Level 9) | Android 1.0 (API Level 1) |
기반 | Google Play 서비스 | Android 시스템 API |
정확도 | 자동 최적화 (GPS + 네트워크) | 직접 GPS/네트워크 선택해야 함 |
배터리 효율 | 최적화됨 | GPS 사용 시 배터리 소모 많음 |
비동기 지원 | requestLocationUpdates() 사용 | 직접 쓰레드 관리 필요 |
백그라운드 지원 | Google Play 서비스 활용 | 수동으로 서비스 관리 필요 |
권장 여부 | Google 공식 권장 방식 | 권장되지 않음 (Legacy) |
LocationManager를 사용할 경우
- Google Play 서비스가 없는 기기에서 위치 정보를 가져와야 할 때
- 중국 내 스마트폰 중 일부는 Google Play 서비스가 없음
- Android 1.0 ~ 2.2 (API Level 1~8)를 지원하는 구형 앱을 개발할 때
- 최신 Android 앱에서는 거의 사용되지 않음
- 고급 GPS 기능이 필요한 경우
- GPS의 원시 데이터(raw data)를 직접 다뤄야 할 때
728x90
반응형
'안드로이드 학습(Kotlin)' 카테고리의 다른 글
18. Android의 주요 데이터 저장소 방식 (2) | 2025.02.07 |
---|---|
Geocoder란? (2) | 2025.02.06 |
LocationRequest란? (0) | 2025.02.06 |
17. Android Animation (Property Animation) (1) | 2025.02.04 |
16. Glide로 이미지 처리하기 (1) | 2025.02.04 |