Казалось, никто не знал, поэтому я купил аккаунт разработчика iOS и провел несколько экспериментов.Вот что я нашел:
При запуске на переднем плане вы можете запустить сканирование, используя CBCentralManager :: scanForPeripheralsWithServices.Ваше сканирование может быть ограничено для устройств, рекламирующих определенную услугу, или неограниченно (передайте ноль для параметра этого вызова).Он также может разрешать или запрещать дубликаты ;в первом случае вы получите обратный вызов didDiscoverPeripheral каждый раз, когда iPhone получает рекламные пакеты;в последнем случае вы получите только один обратный вызов на каждое найденное устройство.
Когда вы входите в фоновый режим, правила выглядят следующим образом:
- Если вы запускаете неограниченное сканирование , оно будет автоматически отменено.Вы не получите никаких обратных вызовов didDiscover.
- Если ваше сканирование было ограничено (т. Е. Вы указали один или несколько UUID службы, которые вы искали), сканирование продолжится, но флаг разрешения дубликатов будет игнорироваться .Это означает, что теперь вы будете получать ответные вызовы didDiscoverPeripheral только для новых устройств.Если все устройства были замечены на переднем плане, вы вообще не получите обратных вызовов.
- Запуск и остановка сканирования не сбрасывает, какие устройства считаются новыми.Если присутствует одно устройство, вы получите только один обратный вызов, даже при нескольких сканированиях, если только ...
- Если вы подключаете к устройству, то отключаете , затем сканирование еще раз , устройство будет снова перечислено (т.е. вы получите еще один вызов didDiscoverPeripheral).Я полагаю, что iOS считает, что «проявил интерес» к устройству.
Я не знаю, достаточно ли хороши попытки подключения к неподключаемым устройствам (например, рекламодателям BLE, например, реализующим профиль близости)в качестве примера устройства могут быть подключены.Однако, по крайней мере, для подключаемых устройств этой процедуры сканирования / подключения / отключения / сканирования достаточно для опроса наличия устройства в фоновом режиме.
Приведенные выше результаты были получены с помощью iPhone 4S под управлением iOS 5.0.1