2015-06-10 5 views
8

Ich hätte gerne eine Liste von Geräten, mit denen mein iOS eine Verbindung herstellen kann, die aktualisiert wird, wenn Geräte angezeigt und ausgeblendet werden.Wie erkennt man mit CoreBluetooth, wenn ein Peripheriegerät verschwindet?

Um das zu tun, ich ein NSMutableDictionnary* peripheralsAvailable erstellt, und jedes Mal - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI; wird durch die CBCentralManager genannt, füge ich die peripher zur peripheralsAvailable Dictionnary (und aktualisiert 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 es nicht entfernen, wenn ich es zum Beispiel herunterfahre.

Können Sie mir sagen, wenn ich etwas verpasse?

Antwort

4

Das Betriebssystem speichert die Erkennung von Geräten im Cache. I.e. Sie erhalten nur ein "Discovery" -Ereignis pro Gerät.

CBCentralManagerScanOptionAllowDuplicatesKey

Ein boolescher Wert, der angibt, ob der Scan ohne doppelte Filterung ausgeführt werden soll:

Zur kontinuierlichen Entdeckung Ereignisse zu erhalten, während die periphere bewirbt, wird die folgende Option verwenden.

Der Wert für diesen Schlüssel ist ein NSNumber-Objekt. Wenn JA, wird die Filterung deaktiviert und ein Erkennungsereignis wird jedes Mal generiert, wenn das zentrale ein Werbepaket vom Peripheriegerät empfängt. Die Deaktivierung dieser Filterung kann sich negativ auf die Batterielebensdauer auswirken und sollte nur bei Bedarf verwendet werden. Wenn NEIN, werden mehrere Entdeckungen desselben Peripheriegeräts zu einem einzigen Entdeckungsereignis zusammengeführt. Wenn der Schlüssel nicht angegeben ist, ist der Standardwert NEIN.

Einstellung der oben Option YES, könnten Sie den Überblick über alle Peripheriegeräte halten die Werbung sind und wenn es Werbung aufhört, können Sie es aus der Liste entfernen könnte.

Für ein Gerät, mit dem Sie verbunden sind, gibt es das Delegate-Ereignis didDisconnectPeripheral.


Bluetooth-Geräte nicht werben, dass sie im Begriff sind, wegzugehen, noch haben sie werben, dass Sie dabei sind außer Reichweite zu gehen. 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 machen, 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.

+1

Vielen Dank! Ich wusste von didDisconnectPeripheral, aber ich musste verbinden, um es zu verwenden.Ich wusste nichts über CBCentralManagerScanOptionAllowDuplicatesKey, und genau das benötigte ich. – darksider

+0

Wie geht das, wenn Sie im Hintergrund sind? Der CBCentralManagerScanOptionAllowDuplicatesKey wird in diesem Fall ignoriert. – kukudas

+1

@ kukudas, könnte Ihr BLE-Peripheriegerät in regelmäßigen Abständen mit einer anderen Geräteadresse werben, so dass der Client es als ein anderes Peripheriegerät im Hintergrund sieht, aber die tatsächliche ID im Werbepaket hat, so dass der Client weiß, dass es ist wirklich das gleiche periphere. –

0

Große 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 angegeben 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.

Verwandte Themen