gpt4 book ai didi

ios - Swift 3 Core 蓝牙未发现服务

转载 作者:行者123 更新时间:2023-12-01 23:53:17 26 4
gpt4 key购买 nike

我正在尝试从我通过 iOS 应用程序连接的 BLE 设备发现服务,但是当调用我的 didDiscoverServices 函数时,外围服务数组为空。

应用程序连接到设备,运行peripheral.discoverServices(nil),然后调用didDiscoverServices函数,但没有返回任何服务。

我已经在线阅读了许多与蓝牙相关的答案和其他示例,据我所知,我的代码与应有的代码没有什么不同,只是它不起作用。我觉得我一定错过了什么地方,但我不确定是什么。

我在下面添加了控制台日志,以获取运行代码时得到的内容,并在底部添加了蓝牙代码以供引用。

Bluetooth initialised
BLE is powered on
Optional("Nordic_Blinky") found at -72
Scanning stopped
Connect request sent
Connected to <CBPeripheral: 0x1c0301a70, identifier = 0887CF7F-98C8-3FCF-2D10-873FFFFB2B65, name = Nordic_Blinky, state = connected>
Discovering services
Services -- Optional([]) and Error -- nil

我的BluetoothHandler类代码如下

class BluetoothHandler : NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {

// MARK: Properties
var manager: CBCentralManager!
var targetPeripheral: CBPeripheral!


// MARK: Shared Instance
static let sharedInstance = BluetoothHandler()
private override init() {
super.init()
self.startManager()
print("Bluetooth initialised")
}

// MARK: Functions

func startManager() {
manager = CBCentralManager(delegate: self, queue: nil)
}

func centralManagerDidUpdateState(_ central: CBCentralManager) {

var consoleMessage = ""
switch (central.state) {

case.poweredOn:
consoleMessage = "BLE is powered on"
manager.scanForPeripherals(withServices: nil, options: nil)

case.poweredOff:
consoleMessage = "BLE is powered off"

case.resetting:
consoleMessage = "BLE Resetting"

case.unknown:
consoleMessage = "BLE state unknown"

case.unsupported:
consoleMessage = "Device not supported by BLE"

case.unauthorized:
consoleMessage = "BLE not authorised"
}
print("\(consoleMessage)")

}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {

if (peripheral.name == "Nordic_Blinky") {

print("\(String(describing: peripheral.name)) found at \(RSSI)")
self.stopScan()

if targetPeripheral != peripheral {

targetPeripheral = peripheral
targetPeripheral!.delegate = self

manager.connect(targetPeripheral, options: nil)
print("Connect request sent")
}

}

else if (peripheral.name != nil) {
print("\(String(describing: peripheral.name))")
}
}

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
print("Connected to \(peripheral)")
peripheral.delegate = self
peripheral.discoverServices(nil)
print("Discovering services")
}

func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Any) {
print("Connection failed", error)
}

func centralManager(_ central: CBCentralManager, didDisconnect peripheral: CBPeripheral) {

if self.targetPeripheral != nil {
self.targetPeripheral!.delegate = nil
self.targetPeripheral = nil
}
print("Connection disconnected")
self.startManager()
}

func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {
print("Services -- \(peripheral.services) and Error -- \(error)")

if let services = peripheral.services {
for service in services {
peripheral.discoverCharacteristics(nil, for: service)
}
}
}

最佳答案

试试这个:swift 3

如果您的外围设备(BLE 设备)有服务,则在日志中打印。

func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) {

if let services = peripheral.services as [CBService]!{

for service in services{

peripheral.discoverCharacteristics(nil, for: service)
}
}
print("==>",peripheral.services!)
}

func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {

for newChar: CBCharacteristic in service.characteristics!{

print(newChar)
}
}

关于ios - Swift 3 Core 蓝牙未发现服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46364556/

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