CoreBluetooth를 사용하여 부근의 비컨을 검색하는 iOS 앱이 있습니다. 그러나 신호가 범위를 벗어 났는지 확인해야합니다. 나는 이미 다음과 같은 일을 안드로이드에서했다 :비컨이 범위를 벗어 났을 때 신속하게 감지합니다.
@Override
public void run() {
try {
if(expirationTime <= 0) {
device.setLost(true);
if(!BeaconScanCallback.getBeaconScanCallbackInstance(activity).isInBackground())
activity.getListAdapter().removeDevice(device);
DeviceManager.getInstance().removeDevice(device);
if(getLocation() != null) {
Log.i("AUTOLOST", "Device lost: " + device.getDeviceName() + " " + getLocation().getLatitude());
activity.postDeviceLocation(device, getLocation().getLatitude(), getLocation().getLongitude(), BeaconStatus.BEACON_LOST, "Device lost");
}
} else {
expirationTime -= 1;
if(isAccepted()) {
handler.postDelayed(new AutoLost(device), expirationTimer);
}
}
} finally {
}
}
안드로이드에서 비컨은 이미 한 번 스캔되었지만 스캔된다. 그래서 나는 그것이 일정 시간 (1 분)에 스캔되지 않는 즉시 배열에서 그것을 자동적으로 제거 할 타임 아웃 방법을 설정할 수 있었다.
여기 내 질문이 있습니다. 스위프트에서 이미 한 번 스캔 된 경우 비컨을 두 번 스캔 할 수 없으므로이 방법이 다시 작동하지 않는다고 생각합니다. 비콘이 범위를 벗어나서 더 이상 스캔 할 수 없는지 확인하는 가능성이 있습니까 (비컨 손실)? 스캔을 시작할 때 CBCentralManagerScanOptionAllowDuplicatesKey
를 지정 경우
시도해 보았습니다. 이것으로 나는 마침내 내가 안드로이드에 가지고 있던 해결책을 적응시킬 수있다. 고맙습니다! 비콘 손실 감지에 대한 기본 지원이 있습니까? –
iOS에서의 기본 비콘 지원은 모두 CoreLocation을 사용하는 iBeacon에 대한 것입니다. 그리고 네, 식별자 패턴과 일치하는 비컨이 더 이상 보이지 않을 때'didExit (region : region)'콜백을 지원합니다. 그러나 CoreBluetooth에 대해 이야기하고 있다면 특정 시간 내에 특정 'CBPeripheral'이 발견되지 않았다고 알려주는 기본 API를 알지 못합니다. 내 가정은 당신이 iBeacon을 사용하지 않는다는 것입니다. Apple이 이러한 API로 광고를 읽지 못하기 때문에 CoreBluetooth로 감지 할 수 없기 때문입니다. – davidgyoung