Fused Location Service란?
Fused Location Service는 안드로이드 플랫폼에서 제공하는 위치 기반 서비스입니다. 이 서비스는 GPS, Wi-Fi, 기지국 등 다양한 위치 제공자의 데이터를 결합하여 정확하고 신뢰할 수 있는 위치 정보를 제공합니다. Fused Location Service는 애플리케이션에 위치 업데이트를 제공하고 위치 기반 기능을 구현하는 데 사용됩니다.
Fused Location Service를 이용하기 위한 권한은?
이 기능을 사용하기 위해 애플리케이션은 다음과 같은 위치 권한을 가지고 있어야 합니다.
ACCESS_FINE_LOCATION: 정확한 위치 정보에 접근하기 위해 필요한 권한
ACCESS_COARSE_LOCATION: 대략적인 위치 정보에 접근하기 위해 필요한 권한
애플리케이션 매니페스트 파일에 위의 권한을 추가해야 합니다.
또한 API 레벨 26 이상 타깃 애플리케이션은 반드시 Fused Location 기능 메서드를 호출하기 전에 런타임 퍼미션을 검사해야 합니다.
FusedLocationProviderClient를 사용하여 GPS 업데이트 예제
다음은 FusedLocationProviderClient를 사용하여 GPS 업데이트를 수행하는 예제입니다.
// FusedLocationProviderClient 초기화
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
// 위치 업데이트 요청 설정
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(10000); // 10초마다 업데이트 요청
// 위치 업데이트 리스너 생성
LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult != null) {
Location location = locationResult.getLastLocation();
// 위치 업데이트 처리
}
}
};
// 위치 업데이트 요청 시작
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
위의 코드에서는 FusedLocationProviderClient를 초기화하고, 위치 업데이트 요청을 설정한 후에 위치 업데이트를 처리하는 콜백을 정의합니다. 마지막으로 requestLocationUpdates 메서드를 호출하여 위치 업데이트 요청을 시작합니다.
getLastLocation를 사용하여 마지막 위치 확인 예제
FusedLocationProviderClient를 사용하여 마지막으로 알려진 위치를 확인하는 예제입니다.
// FusedLocationProviderClient 초기화
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
// 마지막 위치 확인
fusedLocationClient.getLastLocation()
.addOnSuccessListener(this, location -> {
if (location != null) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
// 마지막 위치 처리
}
});
위의 코드에서는 getLastLocation 메서드를 호출하여 마지막으로 알려진 위치를 확인하고, 성공적으로 위치를 얻은 경우 콜백을 통해 해당 위치를 처리할 수 있습니다.
setInterval과 setNumUpdates를 설정하여 1번만 업데이트하는 예제
아래는 한 번만 위치 업데이트를 받도록 설정하는 예제입니다.
// FusedLocationProviderClient 초기화
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
// 위치 업데이트 요청 설정
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setNumUpdates(1); // 1번만 업데이트 요청
// 위치 업데이트 리스너 생성
LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult != null) {
Location location = locationResult.getLastLocation();
// 위치 업데이트 처리
}
}
};
// 위치 업데이트 요청 시작
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
위의 코드에서는 setNumUpdates 메서드를 사용하여 1번만 위치 업데이트를 요청하도록 설정합니다. 따라서 한 번의 업데이트를 받은 후에는 위치 업데이트가 중지됩니다.
Fused Location Service를 사용하여 위치 기반 애플리케이션을 개발할 때, 이러한 예제를 참고하여 필요한 위치 기능을 구현할 수 있습니다.