Как одновременно сканировать несколько служб BLE с помощью iOS CoreBluetooth

Я пытаюсь найти хороший способ для моего приложения iOS сканировать три разных типа периферийных устройств Bluetooth LE, каждый из которых представлен уникальным сервисом/UUID. Методы CBCentralManager scanForPeripheralsWithServices:options принимают массив UUID служб, и в документации говорится, что «центральный менеджер возвращает только периферийные устройства, которые рекламируют указанные вами службы», когда это предоставляется. Однако я обнаружил, что на самом деле это означает, что если вы укажете 3 UUID службы, вы получите только те периферийные устройства, которые рекламируют все три этих службы. то есть это И, а не ИЛИ: он не вернет все периферийные устройства, которые рекламируют ЛЮБУЮ из этих служб в массиве.

Единственный другой вариант, который я вижу, - это передать «ноль» для массива сервисных UUID, и согласно документации «все обнаруженные периферийные устройства возвращаются независимо от их поддерживаемых сервисов (не рекомендуется)». Затем я мог бы отфильтровать любой из трех сервисных UUID, которые я ищу. Но Apple, кажется, отговаривает меня от этого, говоря мне, что это не рекомендуется. Кто-нибудь знает, почему?


person Joe M    schedule 18.02.2015    source источник


Ответы (1)


Apple не рекомендует использовать nil, поскольку он не так эффективен и может сократить срок службы батареи.

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

person Paulw11    schedule 18.02.2015
comment
Ах. Спасибо, Пол. я попробую это - person Joe M; 19.02.2015