为什么我没有通过 CoreBluetooth 获得配对设备的实例?
Why I don't get instance of paired device via CoreBluetooth?
我有一个设备(后来命名为 "scanner")和其他设备(后来命名为 "stone")。扫描仪可以扫描宝石并在内置显示屏上显示其信息。扫描仪可以通过蓝牙发送宝石信息,我想读取这些数据并在我的应用程序中使用它。我开始代码连接实现,但我发现了一个问题。这是我的代码:
import UIKit
import CoreBluetooth
class BluetoothViewController: UIViewController {
var manager:CBCentralManager!
var peripheral:CBPeripheral!
override func viewDidLoad() {
super.viewDidLoad()
manager = CBCentralManager(delegate: self, queue: nil)
}
}
extension BluetoothViewController: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(withServices: nil, options: nil)
}
else {
print("Bluetooth not available.")
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
print("peripheral \(peripheral)")
print("rssi \(RSSI)")
print("advertisementData: \(advertisementData)")
print("--------")
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
print(peripheral)
}
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
print(peripheral)
}
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
print(peripheral)
}
}
extension BluetoothViewController: CBPeripheralDelegate {
}
问题是
中没有出现扫描仪
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)
和
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)
从不打电话。
请注意,我的 iPhone 已与扫描仪连接,扫描仪告诉我连接正常。
我想达到什么目标?
我想创建 viewcontroller 来检查扫描仪是否已连接。
if connected then
get scan information
else
find device and connect
get scan information
请帮助我。 :)
编辑
在 LightBlue Explorer app 中,我的扫描仪设备没有出现。
但是有了这个 app 就可以完美地工作了。
也许使用 CoreBluetooth 是一种错误的方法。什么是更好的。如果上述应用程序的创建者可以与您沟通,您就有可能做到这一点。
感谢@Paulw11 的评论我意识到我的 "scanner" 使用 iPod 附件协议。为了确保我导入 ExternalAccessory
框架并检查设备。
EAAccessoryManager.shared().showBluetoothAccessoryPicker(withNameFilter: nil, completion: nil)
调用此函数后,我看到了附件设备列表,我的扫描仪就在那里。
我有一个设备(后来命名为 "scanner")和其他设备(后来命名为 "stone")。扫描仪可以扫描宝石并在内置显示屏上显示其信息。扫描仪可以通过蓝牙发送宝石信息,我想读取这些数据并在我的应用程序中使用它。我开始代码连接实现,但我发现了一个问题。这是我的代码:
import UIKit
import CoreBluetooth
class BluetoothViewController: UIViewController {
var manager:CBCentralManager!
var peripheral:CBPeripheral!
override func viewDidLoad() {
super.viewDidLoad()
manager = CBCentralManager(delegate: self, queue: nil)
}
}
extension BluetoothViewController: CBCentralManagerDelegate {
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
central.scanForPeripherals(withServices: nil, options: nil)
}
else {
print("Bluetooth not available.")
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
print("peripheral \(peripheral)")
print("rssi \(RSSI)")
print("advertisementData: \(advertisementData)")
print("--------")
}
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
print(peripheral)
}
func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
print(peripheral)
}
func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) {
print(peripheral)
}
}
extension BluetoothViewController: CBPeripheralDelegate {
}
问题是
中没有出现扫描仪func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)
和
func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral)
从不打电话。
请注意,我的 iPhone 已与扫描仪连接,扫描仪告诉我连接正常。
我想达到什么目标?
我想创建 viewcontroller 来检查扫描仪是否已连接。
if connected then
get scan information
else
find device and connect
get scan information
请帮助我。 :)
编辑
在 LightBlue Explorer app 中,我的扫描仪设备没有出现。 但是有了这个 app 就可以完美地工作了。
也许使用 CoreBluetooth 是一种错误的方法。什么是更好的。如果上述应用程序的创建者可以与您沟通,您就有可能做到这一点。
感谢@Paulw11 的评论我意识到我的 "scanner" 使用 iPod 附件协议。为了确保我导入 ExternalAccessory
框架并检查设备。
EAAccessoryManager.shared().showBluetoothAccessoryPicker(withNameFilter: nil, completion: nil)
调用此函数后,我看到了附件设备列表,我的扫描仪就在那里。