티스토리 뷰
< Sdk 제공받기 / Sample app >
Reco beacon은 Memeber center에 'serial number', 'configuration code'를 등록하면 sdk를 제공받을 수 있다.
제공되는 SDK에는 sample app이 있는데,
조금 복잡한듯 보이지만 뜯어보면 크게 다음과 같은 구조로 되어있다.
1. 먼저 BeaconManager로 Service를 실행시키고,
2. Monitoring이나 Ranging callback을 받아낸다.
이런식으로 callback을 주더라.
/**
*------------------------ 1. Monitoring callbacks ------------------------
*/
@Override
public void didEnterRegion(RECOBeaconRegion recoBeaconRegion, Collection<RECOBeacon> collection) {
// 1. region 입장시
tv.append("region 입장. \n");
}
@Override
public void didStartMonitoringForRegion(RECOBeaconRegion recoBeaconRegion) {
// 2. region 입장 후 정상 실행 시
tv.append("region 정상 실행! \n");
}
@Override
public void didDetermineStateForRegion(RECOBeaconRegionState recoBeaconRegionState, RECOBeaconRegion recoBeaconRegion) {
// 3. region의 변화가 감지될 시
tv.append("region 변화감지~ \n");
}
@Override
public void didExitRegion(RECOBeaconRegion recoBeaconRegion) {
// 4. region 퇴장시
tv.append("region 퇴장! \n");
}
@Override
public void monitoringDidFailForRegion(RECOBeaconRegion recoBeaconRegion, RECOErrorCode recoErrorCode) {
// monitoring 실패 시
tv.append("monitoring 실패... ㅠ.ㅠ \n");
}
/**
* ------------------------- 2. Ranging callbacks -------------------------
*/
@Override
public void didRangeBeaconsInRegion(Collection<RECOBeacon> collection, RECOBeaconRegion recoBeaconRegion) {
// ranging중인 region에서, 1초 간격으로 변경사항을 받아 이 callback을 부름
tv.append("ranging..! - ");
if(collection.size() == 0){
tv.append(recoBeaconRegion.getUniqueIdentifier() + " 안잡힘");
} else
{
if (recoBeaconRegion.getUniqueIdentifier().equals("1번 비콘") || recoBeaconRegion.getUniqueIdentifier().equals("2번 비콘")
||recoBeaconRegion.getUniqueIdentifier().equals("3번 비콘")) {
TextView proxText = (TextView) findViewById(R.id.textView);
ArrayList<RECOBeacon> mRangedBeacons = new ArrayList<RECOBeacon>(collection);
for (RECOBeacon beacon : mRangedBeacons) {
proxText.append("떨어진 정도 : " + beacon.getProximity() + "\n");
proxText.append("" + beacon.getAccuracy() + " meters \n" );
}
}
}
}
@Override
public void rangingBeaconsDidFailForRegion(RECOBeaconRegion recoBeaconRegion, RECOErrorCode recoErrorCode) {
// ranging 실패시
tv.append("ranging 실패... ㅠ.ㅠ \n");
}
/**
* -----------------------------------------------------------------------
*/
------------------------------------------------------------------------------------------------------------------------------
< Monitoring vs Ranging >
1. Region Monitoring :
device가 감지할 수 있는 반경안에 beacon들이 들어왔는지
여부를 알려주는 것으로 ( inside, outside, unknown ) 정보를 알 수 있다.
2. Region Ranging :
region에서 감지되는 beacon들의 정보를 열람하는 기능.
사용자가 정의한 region에 대해 ranging을 시작할 경우,
해당 region에 속하는 beacon들의 list를 전달 받아 각 비콘의 정보를 열람할 수 있다.
추가로) Beacon Monitoring / Ranging을 background에서 Service로 돌리는 api도 제공된다. 하지만 계속 돌아가면 배터리 낭비가 있기 때문에 권장되는 사항은 Monitoring만 service로 돌리고, monitoring에서 beacon을 감지했을때 한시적으로 ranging을 수행하도록 한다! (이때 default ranging timeout : 10s)
생각의 전환) 우리는 android를 기준으로 프로그래밍 하는 것이므로 이렇게 생각해야 한다. - 비콘이 일정 반경에 들어온 device를 감지한다 (X)- device를 기준으로 일정 반경안에 들어온 beacon들을 감지한다(O)
------------------------------------------------------------------------------------------------------------------------------
< Testing >
다음은 Region Ranging을 test중인데 3개의 beacon이 모두 잘 잡히는 것을 볼 수 있다.
beacon기기 셋다 바로 옆에 똑같이 모여있는데, 가끔씩 하나가 위처럼 자꾸 튀는 meter값을 냈다.
원인을 찾다보니 다음과 같은 이슈가 있다고 한다.
RSSI (
Received Signal Strength Indication)란,
수신 신호 강도를 나타내는 수치인데,
일반적으로 -80dbm 안쪽으로는 들어와야
그래도 믿을만한 결과라고 간주한다고 한다.
'개발자 배배 > Android' 카테고리의 다른 글
[Android] Service 기본 (0) | 2017.02.08 |
---|---|
[Beacon] 4. Beacon signal parameters Optimization :: 고려 사항들 (0) | 2017.02.06 |
[Beacon] 2. Beacon 기술조사 (0) | 2017.02.04 |
[Beacon] 1. 모니터링 시스템 전체 기획 (0) | 2017.02.04 |
[Android] Retrofit의 동기/비동기 시행착오 (2) | 2017.02.01 |
- Total
- Today
- Yesterday
- monitoring
- 비콘
- 행복의 상대성
- KAKAO
- stopService
- 연동
- Beacon
- eddystone
- startService
- call back 뺏아오기
- layout_weight
- 카톡
- SQLPro
- 책 집필
- nodejs
- ranging
- 카카오톡
- Retrofit
- call back
- 카카오톡 연동
- RECO beacon
- kakao oven
- server ip
- 안드로이드
- fragment 겹침
- Android
- tabLayout
- wegith
- kakaotalk
- 수업교재
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |