Motion


Motion은 3.0.0 버전 이상 부터 제공되며 해당 라이브러리를 추가하여 사용해야 된다.

Motion 은 HSP 에서 확장 라이브러리로 제공하는 API 로 aar 라이브러리 파일과 build.gradle 파일을 수정하여 사용할 수 있다. 

라이브러리 추가 방법은 Android 개발 가이드의 내용을 참조하면 된다.

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

PermissionUtils.checkPermissions(PermissionParams.builder()
    .permission(Manifest.permission.YOU_WANT_PERMISSION)
    .activity(activity)
    .listener((reqCode, result) -> {
        if (!result) {
            TODO

            return ;
        }

        TODO
    })
    .build());

Motion 은 단말의 센서를 이용하여 단말의 X, Y, Z 값을 얻을 수 있다. Motion 기능은 Optional 한 기능이므로 사용자가 별도로 개발하여 사용해도 무방하다. 

Motion 을 통해 전달되는 좌표 값은 MotionData 에 담아 전달되며 아래의 클래스 형태로 구성되어 있으며 세부 내용은 하단을 참조한다. 

MotionData Class

public class MotionData implements Serializable {
   private float x,y,z;
   private long timestamp;
}

MotionData

필드설명
x단말의 x 값 
y단말의 y 값
z단말의 z 값
timestamp이벤트 발생 시간
  

getCurrent

getCurrent 는 단말의 현재 X, Y, Z 값을 반환 한다. 

Example

// 3.10.18 이상
DAPMotion.getCurrent(activity, {
   // TODO
}) {
   // TODO
}

// 3.10.18 이하
val manager = MotionManager(activity)
manager.register();
DAPMotion.getCurrent(manager) { result, value ->
    when (result) {
        OnResultListener.TRUE -> {
           // TODO
       }
       else -> {
           // TODO
       }
   }

    manager.unregister();
}
MotionManager manager = new MotionManager(activity);
manager.register();

// 3.10.18 이상
DAPMotion.getCurrent(manager, result -> {
       // TODO
       manager.unregister();
   }, e -> {
       // TODO
       manager.unregister();
   });

// 3.10.18 이하
DAPMotion.getCurrent(manager, (result, value) -> {
   switch (result) {
       case OnResultListener.TRUE:
           // TODO
           break;
       default:
           break;
   }

    manager.unregister();
});

watch

watch 는 단말의 현재 X, Y, Z 값을 주기적으로 반환 한다. 

Example

val manager = MotionManager(activity)
manager.register(SensorManager.SENSOR_DELAY_NORMAL);

val watchId = "100"

// 3.10.18 이상
DAPMotion.watch(activity, manager, watchId, {
   // TODO
}) {
   // TODO
}

// 3.10.18 이하
DAPMotion.watch(manager, watchId) { result, value ->
    when (result) {
        OnResultListener.TRUE -> {
           // TODO
       }
       else -> {
           // TODO
       }
   }
}
MotionManager manager = new MotionManager(activity);
manager.register(SensorManager.SENSOR_DELAY_NORMAL);

String watchId = "100";

// 3.10.18 이상
DAPMotion.watch(manager, watchId, result -> {
       // TODO
   }, e -> {
       // TODO
   });

// 3.10.18 이하
DAPMotion.watch(manager, watchId, (result, value) -> {
   switch (result) {
       case OnResultListener.TRUE:
           // TODO
           break;
       default:
           break;
   }
});

clearWatch

clearWatch 는 주기적으로 위치 정보를 받기 위해 설정한 watch 를 멈춘다. 이때 사용되는 기준값으 watch 에 사용된 watchId 값을 전달하면 된다. 

Example

val manager = MotionManager(activity)
val watchId = "100"

// 3.10.18 이상
DAPMotion.clearWatch(activity, manager, watchId, {
   // TODO
   manager.unregister()
}) {
   // TODO
   manager.unregister()
}

// 3.10.18 이하
DAPMotion.clearWatch(manager, watchId)
manager.unregister()
MotionManager manager = new MotionManager(activity);
String watchId = "100";

// 3.10.18 이상
DAPMotion.clearWatch(activity, manager, watchId, result -> {
       // TODO
       manager.unregister();
   }, e -> {
       // TODO
       manager.unregister();
   });

// 3.10.18 이하
DAPMotion.clearWatch(manager, watchId);
manager.unregister();