Ich habe eine iOS App, die in der Nähe befindliche Beacons mit CoreBluetooth scannt. Aber ich muss erkennen, wenn ein Beacon außer Reichweite ist. Ich habe schon so etwas wie dies in android:Schnelle Erkennung, wenn Beacon außerhalb des Bereichs liegt
@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 {
}
}
In android ein Leuchtfeuer gescannt wird, obwohl es bereits einmal gescannt wurde. So konnte ich eine Timeout-Methode festlegen, die sie automatisch aus einem Array entfernt, sobald sie in einer bestimmten Zeit (1 Minute) nicht gescannt wurde.
Also hier ist meine Frage: In Swift kann ich ein Beacon nicht zweimal scannen, wenn es schon einmal gescannt wurde, also glaube ich nicht, dass diese Methode wieder funktioniert. Gibt es eine Möglichkeit zu überprüfen, ob ein Beacon außerhalb der Reichweite ist und nicht mehr scannen kann (Beacon verloren)?
Ich habe versucht und das funktioniert. Damit kann ich endlich die Lösung, die ich in Android hatte, anpassen. Vielen Dank! Gibt es eine native Unterstützung für die Erkennung von Beacon-Loss? –
Nun, native Beacon-Unterstützung auf iOS ist alles für iBeacon mit CoreLocation. Und, ja, es unterstützt einen "didExit (region: region)" Callback, wenn Beacons, die einem Bezeichnermuster entsprechen, nicht mehr gesehen werden. Wenn Sie über CoreBluetooth sprechen, sind mir jedoch keine nativen APIs bekannt, die Ihnen sagen, wann ein bestimmtes 'CBPeripheral' in einer bestimmten Zeit nicht erkannt wurde. Meine Vermutung ist, dass Sie nicht iBeacon verwenden, denn wenn Sie es wären, wären Sie sowieso nicht in der Lage, sie mit CoreBluetooth zu erkennen, da Apple das Lesen ihrer Werbung mit diesen APIs blockiert. – davidgyoung