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