안드로이드 가장 최근 위치 얻기

노력을 즐겼던 사람·2020년 10월 5일
0
post-thumbnail

requestLocationUpdates() 메소드를 통해서 일반적인 위치 데이터를 요청하는 방법에 대해서 알아보려고 한다. 앱에 GPS 권한을 부여했다고 가정한다.
Location 데이터는 GPS 뿐만 아니라 WIFI를 통해서도 얻을 수 있다.

가장 최근 Location 데이터 가져오기

디바이스가 유지하고 있는 가장 최근의 Location 데이터를 가져온다.

Google Play Service SDK 설치

Android Studio에서 New Project -> Google Map 프로젝트를 생성하면 Google Play Service SDK가 설치되어 있는듯하다. 그외의 경우에는 링크 참고

Gradle dependencies 추가

Location 에 대한 Gradle 의존성이 필요하다. com.google.android.gms:play-services-location:17.1.0 최신버전 추가해주자.

location service 생성

Location 정보를 가져오기 전에 FusedLocationProviderClient 인스턴스를 생성해야한다.

private FusedLocationProviderClient fusedLocationClient;

// ..

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}

location 데이터 가져오기

위치 정보는 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 객체는 위도, 경도 데이터를 포함하고 있다.
그리고 Locationnull 일 수 있는데 다음과 같은 경우에 null 이 반환된다.

  • 디바이스에 GPS 가 OFF일 때
  • 디바이스가 한번도 GPS 좌표를 기록한 적이 없을 때 (공장초기화 등의 이유)
  • 디바이스에 설치된 Google Play Services가 재시작 됐거나 FusedLocationProvider가 없을 때 해결 방법

Location 데이터 정확도 검증

getLastLocation() 을 통해 가져오는 위치 데이터가 가장 정확한 데이터는 아니다. 그래서 다음과 같은 단계를 거쳐서 정확도를 검증할 수 있다.
아직 무슨 말인지 모르겠다. 문서를 참고하자

profile
노력하는 자는 즐기는 자를 이길 수 없다 를 알면서도 게으름에 지는 중

0개의 댓글