requestLocationUpdates()
메소드를 통해서 일반적인 위치 데이터를 요청하는 방법에 대해서 알아보려고 한다. 앱에 GPS 권한을 부여했다고 가정한다.
Location 데이터는 GPS 뿐만 아니라 WIFI를 통해서도 얻을 수 있다.
디바이스가 유지하고 있는 가장 최근의 Location 데이터를 가져온다.
Android Studio에서 New Project -> Google Map
프로젝트를 생성하면 Google Play Service SDK가 설치되어 있는듯하다. 그외의 경우에는 링크 참고
Location
에 대한 Gradle 의존성이 필요하다. com.google.android.gms:play-services-location:17.1.0
최신버전 추가해주자.
Location
정보를 가져오기 전에 FusedLocationProviderClient
인스턴스를 생성해야한다.
private FusedLocationProviderClient fusedLocationClient;
// ..
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}
위치 정보는 FusedLocationProviderClient
를 통해서 가져올 수 있다. 코드를 살펴보자
fusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations this can be null.
if (location != null) {
// Logic to handle location object
}
}
});
getlastLocation()
메소드는 Task<Location>
객체를 리턴한다. Location
객체는 위도, 경도 데이터를 포함하고 있다.
그리고 Location
이 null
일 수 있는데 다음과 같은 경우에 null
이 반환된다.
getLastLocation()
을 통해 가져오는 위치 데이터가 가장 정확한 데이터는 아니다. 그래서 다음과 같은 단계를 거쳐서 정확도를 검증할 수 있다.
아직 무슨 말인지 모르겠다. 문서를 참고하자