2014-11-30 2 views
2

Я делаю приложение iOS, использующее Core Bluetooth, и периодически проверяет, не находятся ли периферийные устройства. Моя проблема заключается в том, что когда я отключил рекламное устройство (даже отключил bluetooth полностью), мое центральное устройство все еще возвращает CBPeripheral объект, когда я вызываю retrievePeripheralsWithIdentifiers. Мне нужно, чтобы он точно не возвращал это периферийное устройство, когда он больше не рекламируется. Заранее спасибо!Ядро Bluetooth iOS - извлечение ложных периферийных устройств

ответ

2

retrievePeripheralsWithIdentifiers смотрит в базовую базу данных Bluetooth, чтобы узнать, может ли она найти периферийное устройство с указанным идентификатором, независимо от того, видны ли в данный момент рекламные объявления с этого периферийного устройства. Это позволяет вам подключиться к периферийному устройству, которое было замечено ранее, и его можно увидеть снова (сценарий блокировки, описанный в Руководстве по программированию ядра Bluetooth, является одним из примеров, где вы можете использовать это).

Чтобы увидеть, если периферийное рекламу или вы не должны вызвать scanForPeripheralsWithServices, указав YES для CBCentralManagerScanOptionAllowDuplicatesKey и сохранить свою собственную таблицу видимых периферийных устройств, старение их, когда вы еще не видели рекламу в течение некоторого периода времени.

+0

Я использую 'scanForPeripheralsWithServices' и позволяю дубликатам получать список моих периферийных устройств. Тем не менее, я не хочу поддерживать связь со всеми из них, я хочу только посмотреть, все ли они находятся в радиусе действия. Даже если бы я сделал таблицу «видимых» периферийных устройств, как бы я узнал, действительно ли каждый на самом деле «видим»? Попытка подключиться к периферийному устройству, который уже не находится в зоне действия, приведет только к «подключающему» состоянию, которое не отключается. Нет ли способа обновить кеш-память CB или указать, находится ли устройство в пределах диапазона? –

+1

Вот почему вам нужно разрешить дубликаты. Настройте словарь, в котором хранится NSNumber (счет) для каждого обнаруженного вами периферийного идентификатора. Когда вы получаете рекламу из периферийного набора, ее «счет», скажем, 10. Каждые 30 секунд уменьшают все счета. Если счетчик равен 0, удалите его из словаря. Вы можете настроить время и количество обновлений, чтобы получить желаемое поведение. – Paulw11

+0

Получил это. Отлично работает. Спасибо за совет. –

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