当前位置: 首页 > 知识库问答 >
问题:

使用已知外设UUID对蓝牙设备(包括Apple AirPods)进行后台扫描

萧德馨
2023-03-14

在我的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。

我尝试了几种方法:

>

我知道我可以扫描具有如下已知服务ID的设备:扫描外围设备(带有服务UUID:[CBUUID(字符串:GATT ServiceCode)]?,选项…,但我在蓝牙GATT服务规范网站上尝试了每一个分配号,似乎没有一个找到Apple Airpods或其他Apple设备。

我见过其他iOS应用程序在后台为包括Apple AirPods在内的设备工作,因此必须有一种方法来实现这一点。

共有2个答案

狄彬彬
2023-03-14

您将设备标识符与服务标识符混淆。您为iPad Pro显示的UUID是设备上的核心蓝牙为该设备分配的标识符。世界上每一台iOS设备都会收到该iPad的不同标识符。

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

要查看广告中的特定服务,您需要在设备中运行一个应用程序,作为外围设备并广告服务。

如果您的意图是了解这个特定设备何时在附近,那么方法是尝试并保持与它的连接。

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

卫成和
2023-03-14

您应该能够通过AVAudioSession路由更改通知检测AirPods。

特别是将音频会话类别配置为播放和录制,并将选项设置为允许BluetoothA2DP。

编辑:当您打开/关闭AirPods时,我扫描了蓝牙数据包(这是wundersearch定位它们的时候)。它显示了一个免提音频网关,所以如果您还没有尝试使用AVAudio会话来查看是否收到newDevice可用通知,这可能是他们进行检测的方式。

 类似资料:
  • 是否可以在后台扫描宣传UUID的外围设备,该UUID不是已知的配置文件?我有一个外围设备广告这些服务UUID:180418021803,“00000200-37CB-11E3-8682-0002A5D5C51B 当我这样扫描时: CenturalManager.scanForPerperpheralsAuthServices([CBUUID(string:"00000200-37CB-11E3-8

  • 开启蓝牙扫描 参数说明 字段 类型 必须? 说明 blePrefix String 是 设备名称类型前缀 示例代码 Swift: RokidMobileSDK.binder.startBLEScan(blePrefix: String) ->Bool Objc: [RokidMobileSDK.binder startBLEScanWithBlePrefix:@"Rokid-"]; 手机蓝牙未打

  • 扫描设备 介绍 需要传入扫描蓝牙设备的名称的前缀,回调均在主线程。如果传空,是无法获取设备列表。 1、单前缀蓝牙设备 参数说明 字段 类型 必须? 说明 type String 是 设备名称类型前缀 举个大栗子 String type = "Rokid-" RokidMobileSDK.binder.startBTScan(type, new IBTScanCallBack() { @Ov

  • 问题内容: 我正在尝试使用Linux上的Python 列出所有附近的/可发现的蓝牙设备, 包括已经配对的 蓝牙设备。 我知道如何使用其地址列出设备的服务,并且可以成功连接: 如果我不指定任何条件,则阅读PyBluez文档时,我希望附近的任何设备都能显示出来: “如果未指定任何条件,则返回检测到的所有附近服务的列表。” 我现在唯一需要的是能够列出已经配对的设备,无论它们是打开,关闭,附近还是不打开。

  • deviceName String deviceId String

  • 我有一个蓝牙设备,它正在测量力并基本上发送一个值。有一个android应用程序可以连接到它,但我想开发自己的应用程序,因为我想添加一些功能。我设法连接到它,但不知道哪个服务或特征是具有我需要的号码的服务或特征。有人可能知道它可能是其中的哪一个? 服务00001801-0000-1000-8000-00805f9b34fb 服务00001800-0000-1000-8000-00805f9b34fb