iOS上的scanForPeripheralsWithServices无法按服务UUID

时间:2015-09-29 03:18:59

标签: ios bluetooth

我正在使用scanForPeripheralsWithServices按服务UUID扫描设备。当我使用某些标准服务UUID值时,它有时会起作用。

当我尝试使用自定义服务UUID时,它通常不会找到任何设备,但是如果我使用nil作为服务UUID列表,它将找到那些在我使用其服务UUID时找不到的相同设备。 / p>

发生了什么事?可能是因为设备的广告包只能宣传它的一些服务吗?

1 个答案:

答案 0 :(得分:1)

外围设备公布的服务集通常小于其提供的服务。这是因为广告中的空间有限,因此仅宣传" primary"服务。

来自Apple Core Bluetooth Programming Guide -

  

广告时可以使用的空间也有限制   数据。当您的应用程序位于前台时,它最多可以使用28个字节   初始广告数据中的空间用于两者的任何组合   支持的广告数据密钥。如果这个空间用完了,那就有了   扫描响应中可以使用的另外10个字节的空间   仅限本地名称。任何不适合的服务UUID   分配的空间被添加到一个特殊的“溢出”区域;他们可以   仅由显式扫描它们的iOS设备发现。   当您的应用程序在后台时,不会公布本地名称   并且所有服务UUID都放在溢出区域中。

     

为了帮助您保持这些空间限制,请限制服务   您向那些标识您的主要服务的人宣传的UUID。

例如,心率设备可以提供心率服务,设备信息服务,电池服务等等,但它只会宣传心率服务,因为这是其他设备将提供的服务。 ;感兴趣的"因为它将此设备与其他类设备区分开来。

识别设备并建立连接后,如果需要,可以发现其他服务。