iOS swift5 获取系统或其他app已经连接的蓝牙设备

文章目录

  • chatGPT答案
    • 1.2 retrievePeripheralsWithIdentifiers(亲测有效):这里获取到的peripheral还是处于未连接状态,需要再连接一次
  • 本人实例
  • 参考博客

chatGPT答案

  • 1.1 retrieveConnectedPeripherals(withServices (本人没有测试成功)
    要获取系统或其他app已连接的蓝牙设备,你可以使用CoreBluetooth框架提供的CBCentralManager类。下面是使用Swift 5的示例代码:
import CoreBluetoothclass BluetoothManager: NSObject, CBCentralManagerDelegate {var centralManager: CBCentralManager!override init() {super.init()centralManager = CBCentralManager(delegate: self, queue: nil)}func centralManagerDidUpdateState(_ central: CBCentralManager) {if central.state == .poweredOn {// 扫描已连接的外设let connectedPeripherals = centralManager.retrieveConnectedPeripherals(withServices: [/* 服务UUID */])for peripheral in connectedPeripherals {print(peripheral.name)// 如果需要,你可以保存已连接的外设以供后续使用}}}
}

在上面的示例中,当CBCentralManager对象初始化时,你必须提供一个代理对象来接收蓝牙中央管理器的事件通知。然后,你可以实现centralManagerDidUpdateState方法,在蓝牙中央管理器状态更新时调用该方法。在该方法中,你可以使用retrieveConnectedPeripherals(withServices:)方法获取已连接的外设列表。需要注意的是,你需要指定要扫描的服务的UUID,这样你才能获取到对应服务的已连接外设。

1.2 retrievePeripheralsWithIdentifiers(亲测有效):这里获取到的peripheral还是处于未连接状态,需要再连接一次

在使用CoreBluetooth框架时,你可以使用retrievePeripherals(withIdentifiers:)方法获取系统已连接的蓝牙设备。该方法接受一个UUID数组作为参数,用于指定要检索的蓝牙设备的标识符。

下面是使用Swift 5的示例代码:

import CoreBluetoothclass BluetoothManager: NSObject, CBCentralManagerDelegate {var centralManager: CBCentralManager!override init() {super.init()centralManager = CBCentralManager(delegate: self, queue: nil)}func centralManagerDidUpdateState(_ central: CBCentralManager) {if central.state == .poweredOn {// 检索已连接的外设let uuids = [UUID(uuidString: "设备标识符1"), UUID(uuidString: "设备标识符2")]let connectedPeripherals = centralManager.retrievePeripherals(withIdentifiers: uuids)for peripheral in connectedPeripherals {print(peripheral)// 如果需要,你可以保存已连接的外设以供后续使用}}}
}

在上面的示例中,当CBCentralManager对象初始化时,你必须提供一个代理对象来接收蓝牙中央管理器的事件通知。然后,你可以实现centralManagerDidUpdateState方法,在蓝牙中央管理器状态更新时调用该方法。在该方法中,你可以使用retrievePeripherals(withIdentifiers:)方法根据指定的设备标识符数组检索已连接的外设。如果找到匹配的外设,它们将返回给你,你可以进行相应的操作。

确保提供正确的设备标识符,并使用正确的UUID对象作为参数。你可以通过外设的identifier属性获取设备的标识符。

请注意,只有在设备已经连接并且还处于连接状态时,你才能使用该方法成功检索到外设。如果设备未连接或已断开连接,将无法获取到它们。

  • 1.3 ExternalAccessory框架提供的EAAccessoryManager类(本人没有测试成功)

红色涂掉的是app的名字
请添加图片描述

要获取iOS系统已配对的蓝牙设备,你可以使用ExternalAccessory框架提供的EAAccessoryManager类。请注意,ExternalAccessory框架仅适用于与iOS设备进行MFi认证的蓝牙设备。下面是使用Swift 5的示例代码:

import ExternalAccessoryclass BluetoothManager {func getPairedBluetoothDevices() {let connectedAccessories = EAAccessoryManager.shared().connectedAccessoriesfor accessory in connectedAccessories {print(accessory.name)// 如果需要,你可以保存已配对的蓝牙设备以供后续使用}}
}

在上面的示例中,你可以使用EAAccessoryManager.shared().connectedAccessories方法获取已连接的蓝牙配件(包括配对的蓝牙设备)。然后,你可以遍历配件列表并访问每个配件的属性,如名称、型号等。

请注意,使用ExternalAccessory框架要求你的应用程序在Info.plist文件中添加特定的键值对以启用外部配件支持。你需要在Info.plist中添加以下键值对:

Supported external accessory protocols(数组):列出你的应用程序支持的外部配件协议标识符。
UIBackgroundModes(数组):添加值external-accessory以支持在后台与外部配件进行通信。
确保已按照ExternalAccessory框架的要求进行配置,以使其正常工作。

本人实例

参考博客

ios蓝牙扫描指定的设备scanForPeripheralsWithServices(过滤掉其他设备,只留下自家设备) - csdn
iOS蓝牙开发连接系统或其他APP已经连接、配对成功的蓝牙设备 - CSDN


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部