beacon


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

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

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

beacon 기능은 Optional 한 기능이므로 사용자가 별도로 개발하여 사용해도 무방하다.
 

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

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

        return null;
    })
    .build());

비콘 정보 검색을 통해 전달되는 값은 BeaconData 에 담아 전달되며 BeaconData 클래스 정보와 각각의 변수 정보는 하단에 표를 참고 한다.

BeaconData Class

public final class BeaconData implements Serializable {
   public final String uuid;
   public final int major;
   public final int minor;
   public final int rssi;
}

BeaconData

필드설명비고
uuid비콘 고유 ID16bytes
32개의 16진수로 표현되며, 총 36개문자(32개 문자와 4개의 하이픈)으로 구성
major비콘 major 번호2bytes (1 ~ 65535의 정수)
minor비콘 minor 번호2bytes (1 ~ 65535의 정수)
rssi비콘 신호세기–99 ~ -35의 실수
   

startScan

주변의 비콘 정보를 검색해서 BeaconData 형태로 전달 받는데 BeaconFilter 에 설정 된 정보와 일치되는 비콘 정보만 반환 된다.

BeaconFilter 클래스 정보와 각각의 변수 정보는 하단에 표를 참고 한다.

BeaconFilter  Class

public final class BeaconFilter implements Serializable {
   public final String uuid;
   public final int major;
   public final int minor;
}

BeaconFilter

필드설명비고M/O
uuid비콘 고유 ID16bytes
32개의 16진수로 표현되며, 총 36개문자(32개 문자와 4개의 하이픈)으로 구성
M
major비콘 major 번호2bytes (1 ~ 65535의 정수)O
minor비콘 minor 번호2bytes (1 ~ 65535의 정수)O
    

options

필드설명비고M/O
observer비콘정보 관찰자 M
scanId스캔 아이디임의의 문자열M
filter스캔 필터BeaconFilterM
     

Example

val sacnId = "1000"

val observer = BeaconObserver(this@MainActivity)
val filter = BeaconFilter.builder()
   .uuid("e2c56db5-dffb-48d2-b060-d0f5a71096e0")
   .build()

DAPBeacon.startScan(this@MainActivity, observer, sacnId, filter, {
   //TODO
}) {
   //TODO
}
String sacnId = "1000";

BeaconObserver observer = new BeaconObserver(MainActivity.this);
BeaconFilter filter = BeaconFilter.builder()
.uuid(""e2c56db5-dffb-48d2-b060-d0f5a71096e0"")
.build();

DAPBeacon.startScan(MainActivity.this, observer, sacnId, filter, result -> {
      //TODO
  }, e -> {
      //TODO
  });

stopScan

동작 중인 비콘 정보 검색을 종료 하는 기능으로 startScan 을 요청할 때 등록하였던 두 번째 인자인 observer, 세 번째 인자인 watchId 와 동일한 값을 입력해야 한다. 

options

필드설명비고M/O
observer비콘정보 관찰자startScan 에서 생성한 observer 사용M
scanId스캔 아이디임의의 문자열
startScan 에서 생성한 scanId 를 사용
M
     

Example

val sacnId = "1000"
val observer = BeaconObserver(this@MainActivity vity)

DAPBeacon.stopScan (this@MainActivity, observer, sacnId, {
   //TODO
}) {
   //TODO
}
String sacnId = "1000";
BeaconObserver observer = new BeaconObserver(MainActivity.this);

DAPBeacon.stopScan(MainActivity.this, observer, sacnId, result -> {
      //TODO
  }, e -> {
      //TODO
  });

Error Code

CodeCauseComment
E12700파라메터 값이 잘못되어 있을 경우 
E12701전달된 액션 값이 알 수 없는 액션일 경우 
E12702scan 아이디 값이 null 이거나 빈 값인 경우 
E12703비콘 고유 ID 값이 UUID 형식에 맞지않는 경우  
E12704비콘 major 번호가 1 ~ 65535 사이의 정수값이 아닌 경우 
E12705비콘 minor 번호가 1 ~ 65535 사이의 정수값이 아닌 경우 
E12750실행 중 오류가 발생 되었을 경우 
E12751블루투스 설정이 비활성화 되어있는 경우 
E12752startScan 요청 시 scan 아이디 값이 존재하는 경우 
E12753stopScan 요청 시 scan 아이디 값을 찾을 수 없는 경우 
E12754비콘 정보를 얻기위한 서비스가 지원하지 않는 경우 
E12799알 수없는 오류가 발생 되었을 경우