Как вы сканируете одно и то же устройство BLE дважды?

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

Я также хотел бы добавить опцию, позволяющую пользователю передумать и повторно сканировать устройство, но это кажется проблематичным. Наиболее очевидный способ сделать это — остановить сканирование и перезапустить его, например:

    [centralManager stopScan];

    CBUUID *myServiceUUID = [CBUUID UUIDWithString: SERVICE_MYSERVICE];
    NSArray *services = [[NSArray alloc] initWithObjects: myServiceUUID, nil];
    [centralManager scanForPeripheralsWithServices: services options: nil];

Это не работает.

В конце концов, iOS решает сообщить моему приложению, что устройство снова рекламирует, но это занимает несколько минут.

Как я могу убедить iOS сообщить мне о периферийном устройстве во второй раз, не дожидаясь нескольких минут?


person Mike    schedule 03.11.2014    source источник
comment
Вы пытались закрыть свой centralManager и создать новый?   -  person Ian MacDonald    schedule 03.11.2014
comment
@IanMacDonald обычно плохая идея возиться с такими менеджерами. CBCentralManagerScanOptionAllowDuplicatesKey будет работать на переднем плане. Или вы можете попробовать перезапустить сканирование асинхронно, внедрив остановку и запуск в вызовы dispatch_async.   -  person allprog    schedule 04.11.2014


Ответы (1)


Вы можете просто включить опцию CBCentralManagerScanOptionAllowDuplicatesKey при инициализации CBCentralManager. Вы будете получать постоянные обратные вызовы, когда ваше приложение находится на переднем плане, однако вам нужно помнить, что CBCentralManagerScanOptionAllowDuplicatesKey отключен, когда приложение находится в фоновом режиме. Кроме того, интервал сканирования сокращается примерно до 60-й части его аналога переднего плана.

person Tommy Devoy    schedule 03.11.2014