Kontinuierliches Scannen für iOS CoreBluetooth Central Manager?


Answers

Wie bei der vorherigen Antwort, wenn Sie nur an RSSI interessiert sind, können Sie es einfach in die Delegate-Methode bekommen:

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI

CBCentralManager ruft der CBCentralManager diese Methode standardmäßig nur einmal auf. Wenn dieser Callback jedes Mal aufgerufen werden soll, wenn der CBCentralManager ein CBCentralManager empfängt, müssen Sie den Scan mit der Option CBCentralManagerScanOptionAllowDuplicatesKey auf YES initiieren:

NSDictionary *scanningOptions = @{CBCentralManagerScanOptionAllowDuplicatesKey: @YES};
[centralManager scanForPeripheralsWithServices:nil options:scanningOptions];

Achten Sie darauf, dass Apple von der Verwendung dieser Option abrät, wenn dies nicht unbedingt erforderlich ist.

Siehe: iOS Developer Library - Best Practices für die Interaktion mit einem externen Peripheriegerät

Question

Die Low-Energy-Bluetooth-Spezifikation sagt nicht viel darüber aus, ob Peripheriegeräte zu mehr als einer Zentrale gleichzeitig verbunden werden können, aber meine Erfahrungstests sagen mir, dass sie es nicht können.

Da meine Anwendung eine nicht possessive Beziehung mit Peripheriegeräten benötigt (dh keine Verbindungen, die andere blockieren würden) und ständig ihre RSSI-Werte aktualisieren muss, suche ich nach einer Möglichkeit, kontinuierlich nach Peripheriegeräten zu suchen und deren RSSI-Werte zu erfassen.

Die scanForPeripheralsWithServices-Methode scheint nach einem bestimmten Intervall zu suchen und stoppt dann. Ich glaube, dass ich am besten 3 Sekunden hintereinander scanne, stopScan, warte (einige Sekunden) und starte dann einen Scan erneut. Wiederholen.

Kann jemand auf einen besseren Weg hinweisen? Zum Beispiel, ein Peripheriegerät für die Verbindung zu mehr als einem Central konfigurieren?




Links