Я работаю над разработкой приложения для общения с периферийным устройством Bluetooth LE. На данный момент периферийное оборудование, которое я тестирую, является одним из этих. Интересно то, что иногда, когда я его обнаруживаю, я получаю свое собственное имя "SimpleBLEPeripheral", иногда я просто получаю (null)
. Кажется, нет какой-либо команды, которую я могу отправить в CBPeripheral, чтобы принудительно прочитать обновление для имени, поэтому как я могу убедиться, что на самом деле получаю рекламируемое имя периферии?
Название CBPeripheral иногда равно null
Ответ 1
Если вы получите имя из рекламного документа NSDictionary, оно всегда будет именем, которое находится в рекламном пакете, отправленном периферийным устройством.
Однако, если вы читаете свойство name объекта CBPeripheral, это имя может отличаться. Мы стараемся предоставить лучшее имя, известное нам в то время. Если мы еще не подключены к периферии, мы предоставим имя из рекламного пакета. Если соединение с периферией было сделано в прошлом, мы будем читать имя GAP. Мы считаем имя GAP "лучшим", чем то, что находится в рекламном пакете (из-за ограничений размера рекламного пакета).
Ответ 2
Единственное, что я обнаружил, что работает вокруг этой проблемы, - это начать сканирование и остановить сканирование, и в конечном итоге все устройства, которые я ожидаю найти в физическом пространстве, отображаются с именами, отличными от nil, и не-nil UUID.