2015-11-26 3 views
0

В настоящее время я пытаюсь разработать приложение, связанное с Bluetooth, и у меня возникают проблемы со сканированием в фоновом режиме.IOS Developpement: Background BLE-сканирование

Я следил за всем учебным пособием по Bluetooth для iPhone Apple IOS, но не могу понять, почему сканирование не работает в фоновом режиме (мой info.plist правильно настроен для управления BLE Фоновые задачи, как центральные, так и периферийные).

Что я испытывал до сих пор:

1 - Когда мои два устройства находятся в пределах и на переднем плане, сканирование работает хорошо.

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

Здесь приходит неприятности

3 - первый я запускаю мое периферийное устройство, и я положил приложение в фоновом режиме. Затем на периферийном устройстве I отключите bluetooth, я запускаю приложение, я положил его в фоновом режиме, и я включил Bluetooth. В моем коде -(void)centralManagerDidUpdateState:(CBCentralManager *)central вызывает сканирование [centralmgr scanForPeripheralsWithServices:[NSArray arrayWithObject:servicesUUID] options:scanOptions];, функция, которая отлично работает на переднем плане. Но ничего не происходило, периферийное устройство никогда не обнаруживалось центральным.

4 - я запускаю центральный, bluetooth активирован, и я положил его в фоновом режиме. Затем я взял свое периферийное устройство, я вышел из диапазона bluetooth (в конкретном случае я пошел в свой супермаркет, чтобы купить немного пива, чтобы утопить мое горе), я запускаю его там, а также активирован bluetooth - я положил его в фоновом режиме и я вернулся в ближайшем окружении. Снова ничего не произошло, центральные районы не обнаружили периферийного.

Кроме того, после случаев 3 и 4, если я просто поставлю центральную часть на переднем плане (периферийное устройство остается в фоновом режиме), перезапуск обнаружения, не делая ничего другого. Как будто сканирование было успешно запущено в случае 4, но ждет, пока приложение вступит в силу, чтобы фактически начать обнаружение других устройств.

Есть ли у кого-нибудь идея о том, как продолжить/преодолеть проблему?

Спасибо!

Ps: Я извинить за мой английский, я немного ржавый

ответ

1

Привет подробности вы можете увидеть это answer

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

Причина: для центрального вам единственного сканирования с предоставлением услуг UUID, периферической

и в фоновом режиме периферийный не может adverise его UUID, так что даже они там, они просто не знают о каждом присутствии других

Кроме того, некоторые более заметные вещи о фоновом сканировании являются

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

Ключ объявления CBAdvertisementDataLocalNameKey игнорируется, а локальное имя периферийного устройства не объявляется.

Все служебные UUID, содержащиеся в значении ключа рекламы CBAdvertisementDataServiceUUIDsKey, помещаются в специальную зону «переполнения»; они могут быть обнаружены только устройством iOS, которое явно сканирует их.

Если все приложения, являющиеся рекламой, находятся в фоновом режиме, частота, с которой ваше периферийное устройство отправляет рекламные пакеты, может уменьшиться.

See Apple Docs

+0

Я прочитал этот ответ, но в моем CBCentral, я уже указать UUID службы я хочу, и она работает очень хорошо, когда я просматриваю на переднем плане, когда периферийное находится в фоновом режиме. Согласно этому сообщению, он не должен работать, предполагая, что мое центральное лицо ищет конкретный UUID, а мое периферийное устройство находится в фоновом режиме. Я ошибаюсь? – Olympiloutre

+0

Возможно, что-то изменилось, потому что этот ответ был отправлен в 2013 году – Neo

+0

Проверьте, можете ли вы искать UUID, которые в области переполнения могут работать – Neo