Ich hätte gern eine Liste von Geräten, mit denen mein iOS eine Verbindung herstellen kann, die aktualisiert wird, wenn Geräte angezeigt und ausgeblendet werden.
Um das zu tun, habe ich ein NSMutableDictionnary* peripheralsAvailable
erstellt, und jedes Mal, wenn - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI;
vom CBCentralManager aufgerufen wird, füge ich das Peripheriegerät dem Peripheriegerät hinzu (und aktualisiere dann ein UITableView). Alles ist in Ordnung hier.
Allerdings kann ich nicht finden, wie ich das Wörterbuch aktualisieren kann, wenn ein Peripheriegerät "verschwindet". Es scheint, dass ich nur Peripheriegeräte in meinem Wörterbuch hinzufügen kann, wenn sie erkannt werden, aber ich kann ein solches nicht entfernen, wenn ich es zum Beispiel herunterfahre.
Können Sie mir sagen, ob ich etwas verpasse?
Das Betriebssystem speichert die Erkennung von Geräten zwischen. I.e. Sie erhalten nur ein "Discovery" -Ereignis pro Gerät.
Um kontinuierlich Erkennungsereignisse zu erhalten, während das Peripheriegerät Werbung macht, müssen Sie die folgende Option verwenden:
CBCentralManagerScanOptionAllowDuplicatesKey
Ein boolescher Wert, der angibt, ob der Scan ohne ausgeführt werden soll doppelte Filterung.
Der Wert für diesen Schlüssel ist ein NSNumber-Objekt. Wenn JA, wird gefiltert deaktiviert und es wird jedes Mal ein Erkennungsereignis generiert empfängt ein Werbepaket vom Peripheriegerät. Deaktiviere dies Filterung kann sich negativ auf die Akkulaufzeit auswirken und sollte wird nur bei Bedarf verwendet. Wenn NEIN, mehrere Entdeckungen desselben Peripheriegeräte werden zu einem einzigen Erkennungsereignis zusammengeführt. Wenn der Schlüssel ist nicht angegeben, der Standardwert ist NO.
Wenn Sie die obige Option auf YES
setzen, können Sie alle Peripheriegeräte, die Werbung schalten, im Auge behalten und wenn die Werbung eingestellt wird, können Sie sie aus der Liste entfernen.
Für ein Gerät, mit dem Sie eine Verbindung hergestellt haben, gibt es die didDisconnectPeripheral
Delegate-Ereignis.
Bluetooth-Geräte werben nicht dafür, dass sie weggehen, noch melden sie an, dass Sie außer Reichweite geraten. Du bekommst eine Werbung, während sie werben und du bist in Reichweite, und du bekommst nichts, wenn du außerhalb der Reichweite bist oder sie hören auf zu werben. Es gibt kein Ereignis, das ausgelöst werden kann, wenn sie weg sind. Sie müssen sich an die Geräte erinnern, die Werbung sind, und wenn sie aufhören zu werben (Sie haben eine Werbung seit einiger Zeit nicht mehr erhalten), können Sie sie aus der Liste entfernen.
Gute Antwort von Marcus. Eine zusätzliche Anmerkung ist, dass die Scan-Option CBCentralManagerScanOptionAllowDuplicatesKey, wie oben erwähnt, nicht im Hintergrund funktioniert.
Apps, die den Bluetooth-zentralen Hintergrundmodus festgelegt haben, dürfen im Hintergrund scannen. Sie müssen jedoch explizit nach einem oder mehreren Services suchen, indem Sie sie im Parameter serviceUUIDs angeben. Die Scanoption CBCentralManager wird beim Scannen im Hintergrund ignoriert.
Tags und Links ios bluetooth core-bluetooth cbcentralmanager