Android Location

prayme·2020년 9월 26일
0

손자취 앱개발

목록 보기
1/4
post-thumbnail

이번 캡스톤 디자인에서는 GPS 기반으로 한 어플리케이션을 개발할 예정이다. 그래서 구글 문서를 읽어보려고 한다.

Location

Location user driver는 Android location services을 통해서 디바이스의 물리적 위치를 업데이트 해준다. 해당 API는 GNSS, GPS를 지원한다.

GNSS 모듈은 정확한 물리적 위치를 결정하기 위해 위성 신호를 삼각 측량법으로 측정한다. 모듈이 계산하기에 충분한 데이터를 수집하면 데이터를 업데이트 할 수 있게 된다.
Receiver 모듈은 일반적으로 UART라는 호스트 시스템과 연결한다. 하지만 Peripheral I/O와도 사용될 수 있다.

Permission 추가

AndroidManifest.xml에 다음 퍼미션을 추가한다.
<uses-permission android:name="com.google.android.things.permission.MANAGE_GNSS_DRIVERS" />

드라이버 생성

GnssDriver 구현체는 하드웨어와 상호작용하고 지속적으로 위치 변화를 모니터링한다. 위치가 변경되면 프레임워크에 보고한다.
GnssDriver 인스턴스를 생성하고 UserDriverManager 에 등록해야한다.

import com.google.android.things.userdriver.location.GnssDriver;
import com.google.android.things.userdriver.UserDriverManager;
...

public class LocationDriverService extends Service {

    private GnssDriver mDriver;

    @Override
    public void onCreate() {
        super.onCreate();

        // Create a new driver implementation
        mDriver = new GnssDriver();

        // Register with the framework
        UserDriverManager manager = UserDriverManager.getInstance();
        manager.registerGnssDriver(mDriver);
    }

}

만약 더 이상 위치를 추적하고 싶지 않으면 등록을 해제한다.

public class LocationDriverService extends Service {
    ...

    @Override
    protected void onDestroy() {
        super.onDestroy();

        UserDriverManager manager = UserDriverManager.getInstance();
        manager.unregisterGnssDriver();
    }
}

위치변화 보고

만약 위치를 수정해야한다면 reportLocation() 메소드를 사용하자. 이 메소드는 수정된 위치 데이터를 포함한 Location 받을 수 있다. 각 위치변화 보고 때 마다 LocationManager.GPS_PROVIDER를 호출해서 변화된 위치를 가져오자

    import android.location.Location;
    ...

    public class LocationDriverService extends Service {

        private GnssDriver mDriver;
        ...

        private Location parseLocationFromString(String data) {
            Location result = new Location(LocationManager.GPS_PROVIDER);

            // ...parse raw GNSS information...

            return result;
        }

        public void handleLocationUpdate(String rawData) {
            // Convert raw data into a location object
            Location location = parseLocationFromString(rawData);

            // Send the location update to the framework
            mDriver.reportLocation(location);
        }
    }

위치를 업데이트할 때 Location 객체가 포함해야하는 속성은 아래와 같다. Rquired가 포함되지 않으면 오류가 발생한다.

| Required Attributes | Optional Attributes |
|:---------------------:|:---------------------:|
| Accuracy | Altitude |
| Timestamp | Bearing |
| Latitude | Speed |
| Longitude | None |

GPS 데이터 변환

GPS는 GNSS 위성에 주로 사용된다. GPS는 일반적으로 NMEA standard format의 ASCII 문자열로 구성된 위치 정보를 보고한다. 데이터들은 sentence 로 알려진 데이터 단위들마다 콤마로 구분된 데이터의 리스트이다. 각 GPS 모듈은 NMEA 프로토콜의 다른 부분을 보고하도록 선택할 수 있지만 대부분의 장치는 다음 문장 중 하나 이상을 보낸다.

  • GPGGA(Fix Information): 위치 수정, 고도, 타임스탬프, 위성 메타 데이터를 포함합니다.
  • GPGLL(Geographic Latitude/Longtitude): 위치 수정, 타임스탬프를 포함한다.
  • GPRMC(Recommended Minimum Navigation): 위치 수정, 속도, 타임스탬프, 네비게이션 메타 데이터를 포함한다.
profile
잘하고 싶은 사람

0개의 댓글