我正在尝试从我的iOS设备连接到的蓝牙外围设备获取服务列表。retrieveconnected外设是这样做的吗?如果是这样的话,我需要什么样的CBUuid来检索一个带有免提服务的外设。

import CoreBluetooth
class TopVC: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {

var centralManager: CBCentralManager!
var peripheral: CBPeripheral!

 override func viewDidLoad() {
    super.viewDidLoad()

    centralManager = CBCentralManager(delegate: self, queue: nil)
 }

 // required protocol method
func centralManagerDidUpdateState(_ central: CBCentralManager) {
    if central.state == .poweredOn {
        self.centralManager.retrieveConnectedPeripherals(withServices: [CBUUID])
    } else {
        print("bluetooth not available")
    }
 }

}

最佳答案

通常您可以从func scanForPeripherals(withServices serviceUUIDs: [CBUUID]?, options: [String : Any]? = nil)开始扫描可用的bt设备。然后,当找到新设备时,将调用代理。
func retrieveConnectedPeripherals(withServices serviceUUIDs: [CBUUID]) -> [CBPeripheral]立即为您提供当前连接的bt设备列表,这些设备无法告诉您以前连接过什么。通常可以传递一个空数组,这将帮助您获取所有连接的设备。
如何创建CBUUID实例?

 /*!
 * @method UUIDWithString:
 *
 *  @discussion
 *      Creates a CBUUID with a 16-bit, 32-bit, or 128-bit UUID string representation.
 *      The expected format for 128-bit UUIDs is a string punctuated by hyphens, for example 68753A44-4D6F-1226-9C60-0050E4C00067.
 *
 */
public /*not inherited*/ init(string theString: String)

let uuid = CBUUID(string: "XXXXXXX")
通常,如果检索空数组为CBUUID的已连接外设,则将检索已连接外设的空列表。这是安全原因造成的。因此,必须指定一些CBUUID才能检索具有指定CBService的外围设备。

10-08 15:34