geolocation


geolocation 는 HSP 에서 기본으로 제공하는 API 로 AndroidManifest.xml 내 uses-permission 을 추가하면 사용 가능 하다. 

Example 

<uses-feature android:name="android.hardware.location.gps" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

런타임 퍼미션이 필요한 API 는 아래와 같이 사용 가능 하다. 

HspPermission.check(HspPermission.builder()
    .activity(activity)
    .permission(Manifest.permission.YOU_WANT_PERMISSION)
    .listener((reqCode, result) -> {
        if (result) {
            TODO
        } else {
            TODO
        }

        return null;
    })
    .build());

geolocation 는 Android 에서 제공하는 Geolocation 기능의  Wrapper class 이며 geolocation 을 통해 전달되는 위치 정보는 LocationData 에 담아 전달되며 아래의 클래스 형태로 구성되어 있으며 세부 내용은 하단을 참조한다. 

LocationData Class

public static class LocationData implements Serializable {
    String error;
   final GpsData coords;
   final long timestamp;
}

GpsData Class

static class GpsData implements Serializable {
   final double latitude;
   final double longitude;
   final double altitude;
   final double accuracy;
   final double altitudeAccuracy;
}

LocationData

필드필드설명
coordslatitude위도
longitude경도
altitude높이
accuracy위경도의 정확도(meter법)
altitudeAccuracy높이의 정확도(meter법)
timestamp 정보를 수집한 시간
error 오류 발생 시 오류에 대한 설명
   

getCurrentPosition

getCurrentPosition 은 현재 단말의 위치를 정보를 얻어 그 정보를 LocationData 형태로 반환 한다. 

options

필드설명M/O
observer위치정보 관찰자M
   

Example

val observer = DAPGeolocation.LocationObserver(this@MainActivity)

DAPGeolocation.getCurrentPosition(this@MainActivity, observer, {
   //TODO
}) {
   //TODO
}
LocationObserver observer = new LocationObserver(MainActivity.this);

DAPGeolocation.getCurrentPosition(MainActivity.this, observer, result -> {
       // TODO
   }, e -> {
       // TODO
   });

watchPosition

watchPosition 은 3번째 인자인 interval 값을 참조하여 주기적으로 단말의 위치 정보를 LocationData 형태로 전달 받는데, Android 에서 제공 하는 GPS 정보 특성 때문에 이동 거리가 없는 경우 지정한 시간에 맞춰 데이터가 반환 되지 않을 수도 있다. 

options

필드설명비고M/O
observer위치정보 관찰자 
interval정보 갱신 시간 (ms) 
watchIdwatch 아이디임의의 문자열M
     

Example

val observer = DAPGeolocation.LocationObserver(this@MainActivity)

DAPGeolocation.watchPosition(this@MainActivity, observer, "1", 1000, {
   //TODO
}) {
   //TODO
}
LocationObserver observer = new LocationObserver(MainActivity.this);

DAPGeolocation.watchPosition(MainActivity.this, observer, "1", 1000, result -> {
       // TODO
   }, e -> {
       // TODO
   });

clearWatch

clearWatch 는 watchPosition 을 clear 하는 기능으로 watchPosition 을 요청할 때 등록하였던 첫 번째 인자인 observer, 두 번째 인자인 watchId 와 동일한 값을 입력해야 한다. 

options

필드설명비고M/O
observer위치정보 관찰자watchPosition 에서 생성한 observer 사용
watchIdwatch 아이디임의의 문자열
watchPosition 에서 생성한 watchId 사용
M
     

Example

val observer = DAPGeolocation.LocationObserver(this@MainActivity)

DAPGeolocation.clearWatch(this@MainActivity, observer, "1", {
   //TODO
}) {
   //TODO
}
LocationObserver observer = new LocationObserver(MainActivity.this);

DAPGeolocation.clearWatch(MainActivity.this, observer, "1", result -> {
       // TODO
   }, e -> {
       // TODO
   });

Error Code

CodeCauseComment
E10500파라메터 값이 잘못되어 있을 경우 
E10501전달된 액션 값이 알 수 없는 액션일 경우 
E10502정보 갱신 시간 정보가 잘못되어 있을 경우 
E10503watch 아이디 값이 null 이거나 빈 값인 경우 
E10550실행 중 오류가 발생 되었을 경우 
E10551watchPosition 요청 시 watch 아이디 값이 존재하는 경우 
E10552clearWatch 요청 시 watch 아이디 값을 찾을 수 없는 경우 
E10553위치 정보을 얻기위한 서비스가 지원하지 않는 경우 
E10599알 수없는 오류가 발생 되었을 경우