Bluetooth LE сканирование в фоновом режиме - PullRequest
0 голосов
/ 15 марта 2020

Я создаю приложение для сканирования устройств BLE в фоновом режиме и каждую минуту отправляю список устройств на сервер

private let uuid = CBUUID(string: "DEC18772-CCC0-462D-92FB-F5C823537895")

self.centralManager?.scanForPeripherals(withServices: [uuid], options: [CBCentralManagerScanOptionAllowDuplicatesKey : true])

В файле plist

    <array>
        <string>bluetooth-central</string>
        <string>bluetooth-peripheral</string>
    </array>

Я использую таймер для отправки списка устройств на сервер через 60 секунд

var timer = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)

, но когда я создаю приложение в фоновом режиме все кажется приостановленным, таймер и обратный вызов didDiscover не работают

Чего не хватает, чтобы приложение работало в фоновом режиме?

1 Ответ

1 голос
/ 15 марта 2020

Вы столкнулись с парой проблем, связанных с тем, что вы пытаетесь сделать:

  1. A Timer просто не срабатывает, пока ваше приложение приостановлено; выполнение с указанным c периодом не поддерживается в фоновом режиме на iOS.
  2. Вы не можете использовать CBCentralManagerScanOptionAllowDuplicatesKey при сканировании в фоновом режиме.

Как вы включив фоновый режим Bluetooth в своем Info.plist, при условии, что пользователь предоставит фоновое разрешение Bluetooth, вы будете получать didDiscover делегатский обратный вызов каждый раз, когда будет замечено новое устройство , которое рекламирует указанную услугу (DEC18772-CCC0-462D-92FB-F5C823537895).

Вы можете сообщить об обнаружении этого устройства на ваш сервер в этом обратном вызове.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...