gpt4 book ai didi

IOS 应用程序在连接后未从蓝牙设备接收到触发事件

转载 作者:可可西里 更新时间:2023-11-01 01:56:16 25 4
gpt4 key购买 nike

我有一个蓝牙设备。当我触发设备时,IOS 应用程序在 func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) 方法中接收触发事件 advertisementData["kCBAdvDataLocalName"] 但是当我通过 centralManager.connect(heartRatePeripheral) 方法将 BLE 蓝牙设备连接到我的应用程序时,它没有在任何 CBPeripheralDelegate 中收到触发事件 方法。请帮助我如何在将 BLE 设备与 IOS 应用程序连接后获取事件。下面是我的完整代码。

import UIKit
import CoreBluetooth

let heartRateServiceCBUUID = CBUUID(string: "FFC2")

class HRMViewController: UIViewController {

@IBOutlet weak var heartRateLabel: UILabel!
@IBOutlet weak var bodySensorLocationLabel: UILabel!

var centralManager: CBCentralManager!
var heartRatePeripheral: CBPeripheral!

override func viewDidLoad() {
super.viewDidLoad()

centralManager = CBCentralManager(delegate: self, queue: nil)
heartRateLabel.font = UIFont.monospacedDigitSystemFont(ofSize:
heartRateLabel.font!.pointSize, weight: .regular)
}

func onHeartRateReceived(_ heartRate: Int) {
heartRateLabel.text = String(heartRate)
print("BPM: \(heartRate)")
}
}

extension HRMViewController: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
}

func centralManager(_ central: CBCentralManager, didDiscover
peripheral: CBPeripheral, advertisementData: [String : Any], rssi
RSSI: NSNumber) {
if advertisementData["kCBAdvDataLocalName"] as? String ==
"SPS026A" {
print(advertisementData["kCBAdvDataLocalName"])
let data =
advertisementData[CBAdvertisementDataManufacturerDataKey]
print("data ==\(data)")
heartRatePeripheral = peripheral
centralManager.connect(heartRatePeripheral)
}
}

func centralManager(_ central: CBCentralManager, didConnect
peripheral: CBPeripheral) {
print("Connected!")
heartRatePeripheral.discoverServices([])
heartRatePeripheral.delegate = self
}
}

extension HRMViewController: CBPeripheralDelegate {
func peripheral(_ peripheral: CBPeripheral, didDiscoverServices
error: Error?) {
guard let services = peripheral.services else { return }
for service in services {
print(service)
peripheral.discoverCharacteristics(nil, for: service)
}
}

func peripheralDidUpdateName(_ peripheral: CBPeripheral) {

}

func peripheral(_ peripheral: CBPeripheral,
didDiscoverCharacteristicsFor service: CBService, error: Error?)
{
guard let characteristics = service.characteristics else {
return }
for characteristic in characteristics {
if characteristic.properties.contains(.read) {
print("\(service): service : \ .
(characteristic.uuid): properties contains .read")
peripheral.readValue(for: characteristic)
}
if characteristic.properties.contains(.notify) {
print("\(service): service : \
(characteristic.uuid): properties contains
.notify")
peripheral.setNotifyValue(true, for:
characteristic)
}
}
}

func peripheral(_ peripheral: CBPeripheral, didOpen channel:
CBL2CAPChannel?, error: Error?) {

}

func peripheralIsReady(toSendWriteWithoutResponse peripheral:
CBPeripheral) {

}

func peripheral(_ peripheral: CBPeripheral,
didUpdateNotificationStateFor characteristic: CBCharacteristic,
error: Error?) {
print("Unhandled Characteristic UUID: \(characteristic)")
}

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor
characteristic: CBCharacteristic, error: Error?) {
print("Unhandled Characteristic UUID: \(characteristic)")
}
}

最佳答案

要发现所有外围设备的服务,您应该将nil 传递给discoverServices,而不是一个空数组。

heartRatePeripheral.discoverServices(nil)

传递空数组表示您不想发现任何服务。

关于IOS 应用程序在连接后未从蓝牙设备接收到触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53113515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com