2015-09-04 2 views
2

Я работаю с Core Bluetooth API в iOS 8.4. Мой код взаимодействует с устройством BLE, которое запрограммировано как iBeacon. Вот каротаж заявление производства моей реализации функции протокола CBCentralManager в didDiscoverPeripheral обратного вызова:Может быть получен ответ сканирования iBeacon

2015-09-04 16: 23: 08,231 CentralManager - ли обнаружить периферическую [CBPeripheral: 0x1742e0b80, идентификатор = 8B63C7F8-44D5-F3E2-AD40 -2916A2513BA9, name = DfuTarg, state = disconnected] с данными [[kCBAdvDataIsConnectable: 0]]

Оператор регистрации печатает значение аргументов функции периферийных устройств и рекламы. Обратите внимание, что печатается имя периферийного устройства (Кстати: я знаю, что DfuTarg - правильное имя сканируемого устройства).

Откуда iOS приобрела это имя? Это не часть рекламного пакета. Он должен поступать из вторичного обмена запросами сканирования/сканирования, да? Возможно ли, чтобы мой код получил доступ к ответу сканирования?

ответ

1

Да, имя CBPeripheral происходит от ответа на сканирование. CoreBluetooth автоматически запрашивает данные ответа сканирования (по крайней мере, когда приложение находится на переднем плане), когда реклама обнаружена.

Метод didDiscoverPeripheral вызывается с информацией как от первоначального объявления, так и от ответа на сканирование, когда оба устройства были приняты устройством. По сути, вы уже получаете доступ к информации об ответах сканирования, используя этот метод обратного вызова.

Важно отметить, что у вас нет доступа к необработанным данным производителя в этом обратном вызове, когда реклама распознается как iBeacon. iOS отключает его, поэтому вы не можете получить к нему доступ. Это верно для байтов данных производителя, присутствующих в рекламе и в ответе сканирования.

См. here для получения дополнительной информации.

+0

Спасибо, Дэвид. – Verticon

Смежные вопросы