2016-05-20 2 views
1

Ich schreibe eine iOS-Anwendung, die mit Bluetooth Low Energy (BLE) mit einem Gerät kommunizieren wird.Automatische Verbindung zum BLE-Gerät in iOS-App

Wenn mein angeschlossenes Gerät außerhalb des zulässigen Bereichs liegt, wird für meine Anwendung das Ereignis disconnect ausgelöst.

Aber ich bekomme keine Verbindungsereignis, wenn das Gerät wieder in den Bereich kommt.

Bitte schlagen Sie einen Ansatz vor, um festzustellen, wann das Gerät in den Bereich zurückkehrt.

+2

Es wäre hilfreich, wenn Sie ein relevantes Beispiel aus Ihrem Code veröffentlichen könnten. Versuchen Sie, die Verbindung zum Peripheriegerät wiederherzustellen? – fractalwrench

Antwort

0

Wenn Sie das Ereignis erhalten, dass das Gerät nicht mehr erreichbar ist, können Sie eine Methode starten, die kontinuierlich prüft, ob das Gerät immer noch nicht erreichbar ist.

Zum Beispiel: while (isConnected == false) ... Sie sagen, dass Sie eine Benachrichtigung erhalten, wenn das Gerät die Verbindung trennt, so dass Sie dieses Ereignis verwenden können, ein solches Verfahren starten

+0

Vielen Dank für die Antwort. Ich starte die Suche im Hintergrund Thread, app kann von Apple abgelehnt werden. Als Hintergrund-Pooling ist in iOS nicht erlaubt. – Phillip

0

Wenn Sie die Trenn erhalten Ereignis, starten Sie einfach die Scan-Funktion: scanForPeripheralsWithServices oder Sie können den Scan-Modus, um doppelte Schlüssel durch [_manager scanForPeripheralsWithServices:self.targetDeviceServiceIDs options:@{CBCentralManagerScanOptionAllowDuplicatesKey:@YES}] akzeptieren. was bedeutet, dass das gleiche Gerät für viele Zeit entdeckt werden würde, bis Sie aufhören zu scannen.

+0

Vielen Dank für die Antwort. Aber wenn ich Disconnection-Ereignis bekomme und wenn ich den Scan im Hintergrund starten, kann App von Apple abgelehnt werden. Als Hintergrund-Pooling ist in iOS nicht erlaubt. – Phillip

+0

In diesem Fall können Sie das angeschlossene Peripheriegerät behalten und alle paar Sekunden einen Timer einrichten, um zu versuchen, die Verbindung wiederherzustellen. Es würde entweder auslösen '- centralManager: didConnectPeripheral:' oder '- centralManager: didFailToConnectPeripheral: Fehler:' – Terence

0

Verbinden Sie die Verbindungsmethode einfach neu, wenn die Verbindung abbricht. Sie müssen keinen Scan starten. Es wird automatisch versuchen, die Verbindung wiederherzustellen, bis es in Reichweite kommt.

+0

Das ist richtig. Verbindungsversuche werden nicht zeitgesteuert ausgeführt (wie in der Apple-Dokumentation angegeben: https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/CBCentralManager_Class/#//apple_ref/occ/instm/CBCentralManager/connectPeripheral:options :). Achten Sie darauf, auch einen Verweis auf das Peripherieobjekt beizubehalten, andernfalls wird die Verbindung abgebrochen. – p2pkit

+0

Es kann jedoch passieren, dass Sie kein Glück haben, wenn Sie diese Funktion längere Zeit nicht verwenden möchten, wenn Sie im Hintergrundmodus arbeiten. Das System kann Ihre App zum Absturz bringen und wird nicht neu gestartet, wenn Bluetooth ausgeschaltet wurde, entweder wenn der Benutzer dies in der Benutzeroberfläche getan hat oder wenn Bluetooth abgestürzt ist und neu gestartet wurde. – Emil

0

Wenn Ihr Gerät die Verbindung getrennt wird oder außerhalb der Reichweite von Bluetooth ist, müssen Sie nicht nach Peripheriegeräten suchen, da es bereits nach den BLE-Geräten gescannt hat.

Rufen Sie die Funktion [centralObj connectPeripheral:peripheral options:nil]; in die Delegate-Methode didDisconnectPeripheral auf, wenn das BLE-Gerät getrennt wurde.

Verwandte Themen