我使用Core Bluetooth Framework来发现macos APP的蓝牙设备,代码如下,
discoveredPeripherals
回调中的变量print
和centralManager
语句,在我的Macbook蓝牙设置上没有显示连接的设备,例如“Devialet Gemini”图像上的 II'。 centralManager
回调正常,print
打印了除“Devialet Gemini II”之外的许多其他设备。我确信它是 BLE 设备。
!!!当我取消配对并断开“Devialet Gemini II”时,也无法发现设备,但 macos 系统蓝牙设置可以。
系统面板--(连接状态图):
!!!当我取消配对并断开“Devialet Gemini II”的连接时,也无法发现设备,但 macos 系统蓝牙设置可以。
系统面板--(未配对和断开连接状态img:)
打印日志:连接或断开或未配对,始终无法发现“Devialet Gemini II”设备。
class BluetoothManager: NSObject, CBCentralManagerDelegate, ObservableObject {
@Published var isBluetoothEnabled = false
@Published var discoveredPeripherals = [CBPeripheral]()
@Published var connectedPeripherals = [CBPeripheral]()
@Published var pairedPeripherals = [CBPeripheral]()
private var centralManager: CBCentralManager!
override init() {
super.init()
centralManager = CBCentralManager(delegate: self, queue: nil)
}
func connect(_ central: CBCentralManager, _ peripheral: CBPeripheral) {
central.connect(peripheral)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
if central.state == .poweredOn {
isBluetoothEnabled = true
centralManager.scanForPeripherals(withServices: nil, options: nil)
} else {
isBluetoothEnabled = false
}
}
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
// there is no connected devices(named "Devialet Gemini II") as image show !!!!!!!!!
print("discover: \(peripheral.name ?? "Unknown")-\(peripheral.state)")
if !discoveredPeripherals.contains(peripheral) {
discoveredPeripherals.append(peripheral)
}
if !connectedPeripherals.contains(peripheral) && peripheral.state == .connected {
connectedPeripherals.append(peripheral)
}
}
}
问题解决了,设备的名称可能是在连接后分配的,所以我不应该查找名称。