Niemand schien es zu wissen, also kaufte ich ein iOS-Entwicklerkonto und führte einige Experimente durch. Folgendes habe ich gefunden:
Wenn Sie im Vordergrund ausgeführt werden, können Sie einen Scan mit CBCentralManager :: scanForPeripheralsWithServices starten. Ihr Scan kann auf Geräte beschränkt sein , die für einen bestimmten Dienst werben, oder uneingeschränkt (für den Parameter dieses Anrufs wird Null übergeben). Es kann auch Duplikate zulassen oder nicht zulassen . Im ersteren Fall erhalten Sie jedes Mal einen didDiscoverPeripheral-Rückruf, wenn das iPhone Werbepakete empfängt. In letzterem Fall erhalten Sie nur einen Rückruf pro gefundenem Gerät.
Wenn Sie den Hintergrund eingeben, sehen die Regeln wie folgt aus:
- Wenn Sie einen uneingeschränkten Scan ausgeführt haben, wird dieser stillschweigend abgebrochen. Sie erhalten keine didDiscover-Rückrufe.
- Wenn Ihr Scan eingeschränkt war (dh Sie haben eine oder mehrere Dienst-UUIDs angegeben, nach denen Sie gesucht haben), wird Ihr Scan weiterhin ausgeführt, das Flag "Duplikate zulassen" wird jedoch ignoriert . Dies bedeutet, dass Sie jetzt nur didDiscoverPeripheral-Rückrufe für neue Geräte erhalten. Wenn alle Geräte im Vordergrund gesehen wurden, erhalten Sie überhaupt keine Rückrufe.
- Durch Starten und Stoppen des Scans wird nicht zurückgesetzt, welche Geräte als neu gelten. Wenn ein Gerät vorhanden ist, erhalten Sie auch bei mehreren Scans nur einen einzigen Rückruf, es sei denn ...
- Wenn Sie eine Verbindung zu einem Gerät herstellen, dann die Verbindung trennen und erneut scannen , wird das Gerät erneut aufgelistet (dh Sie erhalten einen weiteren Aufruf von didDiscoverPeripheral). Ich denke, iOS betrachtet dies als "Interesse gezeigt" an dem Gerät.
Ich weiß nicht, ob Verbindungsversuche mit nicht verbindbaren Geräten (z. B. BLE Advertisers, wie diejenigen, die das Näherungsprofil implementieren) gut genug sind, da meine Beispielgeräte verbindbar sind. Zumindest für anschließbare Geräte reicht dieses Verfahren zum Scannen / Verbinden / Trennen / Scannen jedoch aus, um die Anwesenheit eines Geräts im Hintergrund abzufragen.
Die obigen Ergebnisse wurden mit einem iPhone 4S unter iOS 5.0.1 gesammelt