Я делаю приложение iOS, использующее Core Bluetooth, и периодически проверяет, не находятся ли периферийные устройства. Моя проблема заключается в том, что когда я отключил рекламное устройство (даже отключил bluetooth полностью), мое центральное устройство все еще возвращает CBPeripheral объект, когда я вызываю retrievePeripheralsWithIdentifiers. Мне нужно, чтобы он точно не возвращал это периферийное устройство, когда он больше не рекламируется. Заранее спасибо!Ядро Bluetooth iOS - извлечение ложных периферийных устройств
ответ
retrievePeripheralsWithIdentifiers
смотрит в базовую базу данных Bluetooth, чтобы узнать, может ли она найти периферийное устройство с указанным идентификатором, независимо от того, видны ли в данный момент рекламные объявления с этого периферийного устройства. Это позволяет вам подключиться к периферийному устройству, которое было замечено ранее, и его можно увидеть снова (сценарий блокировки, описанный в Руководстве по программированию ядра Bluetooth, является одним из примеров, где вы можете использовать это).
Чтобы увидеть, если периферийное рекламу или вы не должны вызвать scanForPeripheralsWithServices
, указав YES
для CBCentralManagerScanOptionAllowDuplicatesKey
и сохранить свою собственную таблицу видимых периферийных устройств, старение их, когда вы еще не видели рекламу в течение некоторого периода времени.
- 1. CoreBluetooth Обнаружение периферийных устройств
- 2. Невозможно обнаружить службы bluetooth от периферийных устройств
- 3. Обновление значения RSSI для многих периферийных устройств Bluetooth
- 4. Список устройств Bluetooth iOS
- 5. Список связанных периферийных устройств
- 6. BLE writeValue для периферийных устройств
- 7. На каких платформах поддерживается поддержка периферийных/подчиненных устройств Bluetooth 4.0?
- 8. Передача данных одновременно на несколько периферийных устройств iOS BLE
- 9. Обнаружение устройств Bluetooth в IOS
- 10. Список моих устройств Bluetooth iOS
- 11. IOS ядро Bluetooth CBCentralManager scanForPeripheralsWithServices нет результатов
- 12. Может ли iOS повторно подключиться к периферийному устройству Bluetooth LE, указав) CBPeripheral *), а не выполнять извлечение периферийных устройств?
- 13. Карта памяти периферийных устройств STM32F4xx
- 14. Драйверы CMSIS и периферийных устройств
- 15. Сканирование периферийных устройств на фоне
- 16. Bluetooth в iOS - когда прекратить сканирование, если не найдено периферийных устройств
- 17. - это драйверы устройств, специфичные для контроллеров устройств или периферийных устройств?
- 18. iOS список доступных bluetooth-устройств с информацией программным способом
- 19. Ядро Bluetooth - постоянные обновления RSSI для устройств на дальнем расстоянии
- 20. Магазин UUID для обнаружения периферийных устройств в CoreBluetooth LE iOS
- 21. Интеграция периферийных устройств iBeacon и coreBluetooth
- 22. Отключение периферийных устройств, вызывающих неожиданное поведение
- 23. IOS: Sharing Bluetooth
- 24. IOS Ядро Bluetooth: Написание NSData для Характерный
- 25. Синхронизация двух устройств iOS по bluetooth
- 26. Имитация bluetooth-устройств на iOS-симуляторе/XCode
- 27. #define против перечислений для адресации периферийных устройств
- 28. Подключение нескольких периферийных устройств USB к FPGA
- 29. Как определить номера портов для периферийных устройств?
- 30. Как получить уровень заряда батареи подключенных устройств Bluetooth
Я использую 'scanForPeripheralsWithServices' и позволяю дубликатам получать список моих периферийных устройств. Тем не менее, я не хочу поддерживать связь со всеми из них, я хочу только посмотреть, все ли они находятся в радиусе действия. Даже если бы я сделал таблицу «видимых» периферийных устройств, как бы я узнал, действительно ли каждый на самом деле «видим»? Попытка подключиться к периферийному устройству, который уже не находится в зоне действия, приведет только к «подключающему» состоянию, которое не отключается. Нет ли способа обновить кеш-память CB или указать, находится ли устройство в пределах диапазона? –
Вот почему вам нужно разрешить дубликаты. Настройте словарь, в котором хранится NSNumber (счет) для каждого обнаруженного вами периферийного идентификатора. Когда вы получаете рекламу из периферийного набора, ее «счет», скажем, 10. Каждые 30 секунд уменьшают все счета. Если счетчик равен 0, удалите его из словаря. Вы можете настроить время и количество обновлений, чтобы получить желаемое поведение. – Paulw11
Получил это. Отлично работает. Спасибо за совет. –