Моя команда разрабатывает приложение, использующее BLE для iOS / Android, и я отвечаю за приложение для iOS.Приложению необходимо максимально точно отслеживать временную дисперсию полученного RSSI, поэтому я выполняю сканирование BLE методом CBCentralManager
scanForPeripherals
.
Результат не совсем плохой, поскольку он получаеттранслировать пакеты на определенной частоте.Но количество полученных пакетов явно меньше, чем в Android.
Ниже приведен код iOS для сканирования периферийных устройств.Нет ничего особенного, кроме указания идентификатора службы Eddystone.
private func startScanningSynchronized() {
let services = [CBUUID(string: "FEAA")] // Scan for Eddystone beacon
let options = [CBCentralManagerScanOptionAllowDuplicatesKey : true]
self.centralManager.scanForPeripherals(withServices: services, options: options)
}
И делегата для получения пакета.Функция для определения типа фрейма помещена в черный ящик в приведенном ниже коде, но я уверен, что из-за него не исчезнет ни один пакет.Приложение отправило более 1000 пакетов за 5 минут, что кажется разумным, поскольку оно получает около 1 из 3 пакетов от маяка.С другой стороны, версия iOS получает только 100 ~ 200 пакетов за 5 минут.
Это ограничение устройства iOS?Или есть какие-либо настройки для настройки интервала сканирования?