책의 모든 내용을 저자 직강으로 진행한 강의는 ssamz.com 에서 들으실 수 있습니다.
본 글은 [깡샘의 안드로이드 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.
좀더 자세한 내용은 책을 통해 확인해 주세요.
22장. 위치정보 획득
22.1.2. 위치 정보 획득
적절한 위치 정보 제공자가 결정되었다면 이제 그 위치 정보 제공자를 이용하여 스마트폰의 위치를 얻어야 합니다. 가장 간단한 방법은 LocationManager의 getLastKnownLocation ( ) 함수를 이용하는 방법입니다.
Location location=manager.getLastKnownLocation(provider);
매개변수에 담긴 문자열이 위치 정보 제공자이며, 이 함수가 위치 값을 얻지 못하면 null을 반환하고, 위치 값을 잘 가져오면 위치와 관련된 다양한 정보를 Location 객체에 담아 전달합니다. 이렇게 얻은 Location 객체의 getter ( ) 함수로 각종 정보를 얻을 수 있는데, 고도, 속도 등은 데이터가 없을 수도 있습니다.
- getAccuracy(): 정확도
- getAltitude(): 고도
- getBearing(): 방위
- getLatitude(): 위도
- getLongitude(): 경도
- getProvider(): 위치 정보 제공자
- getSpeed(): 속도
- getTime(): 획득 시간
위치 정보를 얻어오는 함수는 getLastKnownLocation( )인데 이 함수는 필요한 순간 한 번만 이용할 수 있습니다. 그러나 때로는 일정 시간 동안 반복해서 위치 정보를 얻어와야 할 때도 있습니다. 이를 위해 LocationListener를 제공합니다.
LocationListener listener=new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
//provider의 상태가 변경되때마다 호출
}
@Override
public void onProviderEnabled(String provider) {
//provider가 사용 가능한 상태가 되는 순간 호출
}
@Override
public void onProviderDisabled(String provider) {
//provider가 사용 불가능 상황이 되는 순간 호출
}
@Override
public void onLocationChanged(Location location) {
//위치 정보 전달 목적으로 호출
}
};
onStatusChanged (String provider, int status, Bundle extras) 함수는 위치 정보 제공자의 상태 변경 시 호출되며 상태 정보 값으로 OUT_OF_SERVICE, TEMPORARILY_ UNAVAILABLE, AVAILABLE의 상수 변수가 전달됩니다. onLocationChanged ( ) 함수가 위치 정보를 전달하기 위해 자동으로 호출되는 함수입니다. 이렇게 정의한 LocationListener를 LocationManager에 등록하여 위치 값을 지속해서 얻을 수 있습니다.
manager.requestLocationUpdates(bestProvider, 10000, 10, listener);
LocationManager의 requestLocationUpdates ( ) 함수로 LocationListener를 등록하는데, 매게변수로는 이용할 위치 정보 제공자, LocationListener 호출 주기, 그리고 변경 위치 거리의 정보를 주면 됩니다. 위의 코드는 지정된 위치 정보 제공자를 이용하여 10초마다 10미터 변경될 때마다 listener 객체의 함수를 호출하게 됩니다.
이처럼 LocationListener를 등록하여 반복적으로 위치 값을 추적할 때는 필요 없는 순간에 등록을 해제하는 것도 중요한데요. 해재는 removeUpdates( ) 함수를 이용합니다.
manager.removeUpdates(listener);
'Android' 카테고리의 다른 글
[깡샘의 안드로이드 프로그래밍] 정리 26 - JSON 파싱 (0) | 2018.01.06 |
---|---|
[깡샘의 안드로이드 프로그래밍] 정리 25 - GoogleMap (0) | 2018.01.06 |
[깡샘의 안드로이드 프로그래밍] 정리 23 - 주소록 데이터 획득 (0) | 2018.01.06 |
[깡샘의 안드로이드 프로그래밍] 정리 22 - ActivityManager (1) | 2018.01.06 |
[깡샘의 안드로이드 프로그래밍] 정리 21 - NotificationChannel (0) | 2018.01.06 |