swift - 我的 Corebluetooth 框架正在连接到多个设备
问题描述
我正在使用corebluetooth框架进行一个项目。当我的中央管理器开始扫描外围设备时,它会在大约一分钟后连接到单个外围设备,它开始连接到具有相同UUID的多个外围设备。
有没有办法告诉设备坚持最初连接的一个外围设备? 变量
public var centralManager: CBCentralManager? = nil
public let baseLayerServices = [SkiinUUID(string: SkiinPeripheral.baseLayerService)]
@Published public var peripherals: AllPeripherals = AllPeripherals()
是否更新了状态
public func centralManagerDidUpdateState(_ central: CBCentralManager) {
print("state: \(self.getStateString())")
if central.state == .poweredOn {
self.showStateAlert = false
if let connectedPeripherals = self.centralManager?.retrieveConnectedPeripherals(withServices: self.baseLayerServices), connectedPeripherals.count > 0 {
print("Already connected: \(connectedPeripherals.map{$0.name}), self.peripherals: \(self.peripherals)")
self.centralManager?.stopScan()
}
else {
print("scanForPeripherals")
self.centralManager?.scanForPeripherals(withServices: self.baseLayerServices, options: nil)
}
}
else {
self.showStateAlert = true
}
}
didDiscover 外设代码
public func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
guard peripheral.state != .connected else {
return
}
print("didDiscover: \(peripheral.name ?? peripheral.identifier.uuidString)")
self.peripherals.baseLayer.top.add(cbPeripheral: peripheral)
self.centralManager?.connect(peripheral, options: nil)
self.observe(peripheral: self.peripherals.baseLayer.top)
}
解决方案
当此代码发现外围设备时,它会尝试连接到它。我没有看到它停止扫描的任何地方,并且它不会仅仅因为它已连接而避免连接。
如果您不想在发现某些内容后继续扫描,请致电stopScanning()
。如果您在已经连接(或连接)时不想连接,那么connect()
在这些情况下不要打电话。
推荐阅读
- python - 在 Python 中计算 n-单纯形数?
- ruby-on-rails - 启动rails服务器“bundle exec rails serve”错误的问题
- javascript - 过滤并获取 json (javascript) 中的特定值
- javascript - 在javascript中将html表达式写为字符串,引号会混淆
- singularity-container - 奇点:无法解析会话目录
- javascript - 邮递员在向 Firebase 函数发布请求时说“错误:无法处理请求”
- ios - 所有输入插入符号未对齐
- android - 我有一个构建我的颤振应用程序的道具
- java - 根据泛型类型加入
- python - 在 Jupyter 笔记本中: !which python 和 sys.executable 返回不同的路径