具有已知外围UUID的蓝牙设备(Apple AirPods)的后台扫描

问题描述 投票:0回答:1

在我的iOS应用中,当我扫描蓝牙设备时,我从附近的每个设备看到外围UUID和其他数据,如下所示:

(uuid: 58B95943-A57E-F818-D3CC-9F8122C64D88, name: "iPad Pro"), advertisementPacket: ["kCBAdvDataRxSecondaryPHY": 0, "kCBAdvDataRxPrimaryPHY": 1, "kCBAdvDataIsConnectable": 1, "kCBAdvDataTimestamp": 612132622.292843, "kCBAdvDataTxPowerLevel": 12], rssi: -37

然后,我希望继续在后台扫描具有特定UUID的单个设备(当应用程序关闭时,并在应用程序靠近或可连接时得到通知。

请注意,许多设备(包括Apple iPad等)在广告包中都没有UUID。他们仅在外围设备信息中具有UUID。

我尝试了几种方法:

  1. 有一个Connect方法,您可以在其中保留连接以在后台等待蓝牙设备的请求,并且回调函数会在设备连接时通知您,但这不适用于永远不会连接的Apple AirPods。

  2. 我知道我可以扫描具有已知服务ID的设备,如下所示:scanForPeripherals(withServices serviceUUIDs: [CBUUID(string: GATT ServiceCode]?, options...但是我在Bluetooth GATT Services Specifications website上尝试了每个分配编号,但它们似乎都找不到Apple Airpods或其他Apple设备。

我已经看到其他iOS应用程序在包括Apple AirPods在内的设备的后台运行,因此必须有一种方法来实现这一目标。

ios swift bluetooth core-bluetooth
1个回答
1
投票

您正在将设备标识符与服务标识符混淆。您为iPad Pro显示的UUID是由Core Bluetooth在that]设备上为that]设备分配的标识符。世界上所有其他iOS设备将为该iPad收到一个不同的标识符。

设备可以宣传众所周知的GATT服务,例如电池信息,设备信息或“专用”服务。这些服务也由UUID标识。这些是您要扫描的UUID。例如。您的应用可能会扫描广告“心率监测器”服务的设备。

要查看广告中的特定服务,您需要在设备上运行的应用作为外围设备并宣传服务。

如果您打算了解此特定设备何时在附近,则方法是尝试维持与该设备的连接。

如果您connect连接到该设备,则在断开连接时(例如,超出范围),您将收到委托回调。然后,您可以立即发出另一个connect。该连接将一直挂起,直到设备返回范围。然后,iOS将重新连接,您将获得另一个委托回调。

© www.soinside.com 2019 - 2024. All rights reserved.