已知外设UUID的蓝牙设备(包括苹果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的单个设备(当应用程序关闭时),并在应用程序接近或可连接时得到通知。

请注意,许多设备(包括苹果iPad等)在广告包中没有UUID。他们只有在Peripheral info中才有UUID。

我试过几种方法。

  1. 有一个连接的方法,你留下一个连接请求的蓝牙设备在后台等待和回调让你知道,当设备连接,但这不工作的苹果AirPods,从来没有连接。

  2. 我知道我可以扫描已知服务ID这样的设备:scanForPeripherals(withServices serviceUUIDs: [CBUUID(string: GATT ServiceCode]?, options...但我尝试了每一个分配号 蓝牙GATT服务规范网站但似乎都找不到苹果Airpods或其他苹果设备。

我已经看到其他iOS应用在后台为包括苹果AirPods在内的设备工作,所以必须有一种方法来实现这一点。

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

你应该能够检测到的AirPods通过 AVAudioSession 途径变更通知.

特别是将您的音频会话类别配置为 playAndRecord 并将该选项设置为 allowBluetoothA2DP.

编辑:我做了一个扫描的蓝牙数据包,当你打开关闭AirPods(这是当wunderfind定位他们). 它显示了一个免提音频网关,所以如果你还没有尝试使用AVAudioSession,看看你是否得到一个。newDeviceAvailable 通知,可能是他们做检测的方式。

enter image description here


1
投票

你混淆了设备标识符和服务标识符。你所显示的iPad Pro的UUID是一个由Core Bluetooth分配的标识符,它是一个服务标识符。你的 用于 设备。世界上其他每一台iOS设备都会收到该iPad的不同标识符。

设备可以宣传众所周知的GATT服务,如电池信息、设备信息或 "私人 "服务。这些服务也由UUID来识别。 这些都是你扫描的UUID。 例如,你的应用程序可以扫描广告 "心率监测器 "服务的设备。

要想在广告中看到特定的服务,你需要一个在设备中运行的应用作为外围设备,并为某项服务做广告。

如果你的目的是了解这个特定的设备何时在附近,那么方法就是尝试和它保持连接。

如果你 connect 到设备,那么当它断开连接时,你将得到一个委托回调(例如,它超出了范围)。 然后您可以立即发出另一个 connect. 这个连接将被挂起,直到设备回到范围内,然后iOS将重新连接,你将得到另一个委托回调.

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