Повторно подключитесь к устройству BLE после извлечения аккумулятора

У меня есть устройство BLE, с которым я пишу приложение для сопряжения. Я могу обнаружить и подключиться к устройству без проблем. Но если я подключен, вытаскиваю и снова вставляю аккумулятор на устройстве BLE, я получаю обратный вызов didDisconnectPeripheral, но никогда не получаю еще один didConnectPeripheral, хотя я все еще сканирую. Я также пытался вызывать retrieveConnectedPeripheralsWithServices и retrievePeripheralsWithIdentifiers, но ни один из них ничего не возвращает.

Как я могу надежно восстановить соединение после выключения питания на моем устройстве BLE?


person CaseyB    schedule 23.12.2014    source источник
comment
Как вытаскивание аккумулятора влияет на режим сопряжения на периферийном устройстве?   -  person Mike D    schedule 23.12.2014
comment
Он загружается обратно и начинает вещание.   -  person CaseyB    schedule 24.12.2014


Ответы (1)


Как только периферийное устройство отключится, вы можете выполнить другое подключение — iOS автоматически повторно подключится к устройству, как только оно снова станет видимым, и вызовет ваш метод делегата didConnectPeripheral:.

-(void) centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
    NSLog(@"Disconnected from peripheral");
    [central connectPeripheral:peripheral options:nil];
}

Нет необходимости повторно сканировать/повторно обнаруживать периферийное устройство.

Вам может понадобиться более полная реализация, которая обновляет пользовательский интерфейс и т. д.

Вот пример кода, который подключается к периферийному устройству и отображает информацию о поставщике — https://github.com/paulw11/BTBackground

person Paulw11    schedule 23.12.2014
comment
Он больше никогда не звонит моему didConnectPeripheral. Я заметил, что вы используете self.central вместо CBCentralManager, который передается в didDisconnectPeripheral. Любая причина для этого? - person CaseyB; 24.12.2014
comment
Нет, это не должно иметь значения. На самом деле я изменил код, когда скопировал его в свой ответ выше. Какая у тебя периферия? Мой тестовый проект успешно протестирован с TI sensorTag и LightBlue Bean. - person Paulw11; 24.12.2014
comment
Хорошо, я делал кое-что еще в моем didDisconnectPeripheral. Как только я свел это к тому, что у вас есть, это работает. Мне нужно выяснить, что сломало его! Благодарю вас! - person CaseyB; 24.12.2014
comment
Вау, я довольно долго пытался решить эту проблему, добавлял всякие методы в файл didDisconnectPeripheral. Это красиво и хорошо работает для меня! - person Doug; 16.07.2015