我正在努力为我的iOS应用程序找到一种好方法来扫描三种不同类型的蓝牙LE外设,每种外围设备都由一个独特的服务/ UUID代表。 CBCentralManager scanForPeripheralsWithServices:options方法获取一组服务UUID,文档说明“中央管理器仅返回通告您指定的服务的外围设备”。但是我发现这实际意味着如果你指定3个服务UUID,你将只获得宣传所有这三个服务的外围设备。即它是AND而不是OR:它不会返回在阵列中宣传任何这些服务的所有外围设备。
我看到的唯一其他选项是为服务UUID数组传递'nil',并且根据文档“无论支持的服务是什么(不推荐),都会返回所有发现的外围设备”。然后,我可以过滤我正在寻找的三个服务UUID中的任何一个。但苹果似乎通过告诉我不推荐这种做法来阻止我做这件事。谁知道为什么?
答案 0 :(得分:2)
Apple并不建议使用nil
,因为它不具备效率并且会影响电池续航时间。
解决方案只是创建三个CBCentralManager
实例,并让每个实例扫描不同的服务。您甚至可以使用相同的委托实例,因为CBCentralManager
实例将传递给委托方法。