您现在的位置是:首页 >技术杂谈 >iOS swift5 获取系统或其他app已经连接的蓝牙设备网站首页技术杂谈

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

星星月亮0 2024-06-17 10:47:08
简介iOS swift5 获取系统或其他app已经连接的蓝牙设备

chatGPT答案

  • 1.1 retrieveConnectedPeripherals(withServices (本人没有测试成功)
    要获取系统或其他app已连接的蓝牙设备,你可以使用CoreBluetooth框架提供的CBCentralManager类。下面是使用Swift 5的示例代码:
import CoreBluetooth

class 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 CoreBluetooth

class 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 ExternalAccessory

class BluetoothManager {

    func getPairedBluetoothDevices() {
        let connectedAccessories = EAAccessoryManager.shared().connectedAccessories
        for 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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。