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分)でスキャンされないと自動的に配列から削除されます。
これは私の質問です: スウィフトでは、既に1回スキャンされていた場合はビーコンを2回スキャンすることができませんので、この方法が再び機能するとは思いません。ビーコンが範囲外で、それ以上スキャンできないかどうかをチェックする可能性はありますか?
私は試してこれが動作します。これで私は最終的に私がアンドロイドで持っていたソリューションを適応させることができます。ありがとうございました!ビーコンロス検出のネイティブサポートはありますか? –
iOS上のネイティブビーコンサポートは、すべてCoreLocationを使用したiBeacon用です。また、識別子パターンに一致するビーコンが見えなくなったときに 'didExit(region:region)'コールバックをサポートしています。しかし、あなたがCoreBluetoothを話しているなら、特定の「CBPeripheral」が特定の時間内に検出されなかったときにあなたに伝えるネイティブAPIを認識していません。私の前提は、iBeaconを使用していないということです。なぜならAppleはこれらのAPIを使って広告を読んでブロックしているので、CoreBluetoothで検出できないからです。 – davidgyoung