Wie erkennt man mit CoreBluetooth, wenn ein Peripheriegerät verschwindet?

8

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?

    
darksider 10.06.2015, 14:03
quelle

2 Antworten

4

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.

    
Marcus Adams 10.06.2015, 14:15
quelle
0

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.

    
diabetesmike 12.10.2017 04:24
quelle