iOS 6 — отключение Bluetooth LE

Хорошо, что, черт возьми, происходит с iOS6 и как она справляется с отключениями Bluetooth LE? Раньше устройство сразу отключалось, но теперь по какой-то странной причине устройство ждет отключения около 30-60 секунд. Мне нужно, чтобы отключить ASAFP!

Я облазил весь Интернет, пытаясь выяснить, как инициировать немедленное отключение от периферийного устройства, и нашел это отличное электронное письмо, в котором объясняется обходной путь: отказаться от подписки на уведомления о характеристиках службы.

Теперь я думаю, что делаю это.. Когда я хочу отключиться, я звоню [connected_device setNotifyValue:NO forCharacteristic:connected_characteristic]

Затем в функции didUpdateNotificationStateForCharacteristic у меня есть...

if((int)characteristic.isNotifying == 0){
   [manager cancelPeripheralConnection:peripheral];
}

В функции didDisconnectPeripheral...

connected_peripheral = nil;
connected_characteristic = nil;
[connected_peripheral release];
[connected_characteristic release];

Я также тщательно изучил CoreBluetooth Temperature Sensor пример, но это не особо помогло....

Любая помощь в этом была бы потрясающей! Я просто не знаю, что мне не хватает.....

ОБНОВЛЕНИЕ: похоже, что приложение должно быть подключено к устройству Bluetooth не менее минуты, прежде чем ему будет разрешено отключиться. Если приложение подключено более минуты, оно немедленно отключится после отправки команды. В противном случае он будет ждать до этой отметки в одну минуту, чтобы фактически отключиться.

ОБНОВЛЕНИЕ: когда я пытаюсь отключиться до отметки в одну минуту, я получаю следующий вывод в журнал, когда устройство фактически отключается.

Oct 24 16:49:35 Christophers-iPhone awdd[8168] <Error>: libMobileGestalt copySystemVersionDictionaryValue: Could not lookup ReleaseType from system version dictionary
Oct 24 16:49:35 Christophers-iPhone awdd[8168] <Error>: CoreLocation: CLClient is deprecated. Will be obsolete soon.

person ChrisB    schedule 18.10.2012    source источник


Ответы (2)


По словам Apple, эта новая функция «предназначена по замыслу». Мы решили эту проблему, отправив команду на периферийное устройство и отключив его от конца. Если вы это сделаете, то отключение произойдет немедленно. Я не знаю, почему Apple изменила это поведение с iOS5 на iOS6, но у них должны быть свои причины. Конечно, это решение работает только в том случае, если у вас есть доступ к прошивке периферийного устройства и вы можете ее изменить. Если есть другое решение, то мы его не нашли.

person Anders Grunnet-Jepsen    schedule 25.10.2012
comment
Я сделал [self.peripheralManager stopAdvertising] и [self.peripheralManager removeAllServices] на периферийном устройстве, и оно все еще не отключается сразу. Я все еще вижу белый значок Bluetooth в правом верхнем углу до 60-секундной отметки ... - person achow; 19.01.2013
comment
Согласно Apple? Где это (официальное?) заявление? - person MdaG; 07.03.2014
comment
Просто хотел подтвердить, что выдача команды на устройство BLE для отключения решила проблемы, которые у нас были. - person James Parker; 12.03.2015
comment
У меня все еще есть эта проблема на ios 9.1 - какие-либо новые решения этой проблемы? - person benchuk; 06.12.2015

Это была ошибка в iOS 6.0, в 6.1 она исправлена.

person AlexeyVMP    schedule 20.02.2013
comment
Нет, его нет в iOS7. Проверьте сторону вашего устройства. - person AlexeyVMP; 10.03.2014
comment
Даже если я отменю Connect в didConnect, будет 10 секунд. задержка до тех пор, пока физический канал не будет отключен. Однако приложение считает себя отключенным, оно просто не получает никаких данных от периферийного устройства до тех пор, пока соединение не будет окончательно разорвано (через 10 секунд). В документах даже утверждается, что нет никакой гарантии, что физическая ссылка будет разорвана при отмене соединения. - person MdaG; 10.03.2014
comment
Насколько я помню, устройство должно отправить сообщение об отключении обратно на концентратор. Возможно, ваше устройство делает это не так быстро. - person AlexeyVMP; 10.03.2014
comment
Я работал с рядом устройств BLE: HRM, велосипедный датчик, брелок - все отключается, как и ожидалось, на iOS7. - person AlexeyVMP; 10.03.2014
comment
Спасибо за отзыв. - person MdaG; 11.03.2014