无法通过BLE连接到AirPods

Rux*_*xel 11 ios core-bluetooth bluetooth-lowenergy swift

我正在尝试使用BLE通过一个简单的应用程序自动连接到我的AirPods.我得到设备的名称和状态为"连接",但由于某种原因我无法连接到它.函数'didConnect peripheral'永远不会被触发.

我尝试了教程和其他帖子中的所有不同方法,尝试将外围数据存储在数组中以保留引用,但似乎没有任何工作.

有什么步骤我可以在'didDiscover'和'didConnect'之间获得一些额外的信息吗?

在XCode 9.2中工作,在iPhone上使用Swift 4和iOS 11.2.

这是我的代码:

let deviceName = "AirPods de Roger"
var isConnected = false

var manager: CBCentralManager!
var peripheralBLE: CBPeripheral?

override func viewDidLoad() {
    super.viewDidLoad()
    manager = CBCentralManager(delegate: self, queue: nil)
}

func centralManagerDidUpdateState(_ central: CBCentralManager) {
    switch manager.state {
    case.poweredOff:
        print("BLE service is powered off")
    case.poweredOn:
        print("BLE service is powered on and scanning")
        manager.scanForPeripherals(withServices: nil, options: nil)
    default:
        print("BLE service in another state")
    }
}

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    if peripheral.name == deviceName && isConnected == false {
        self.manager.stopScan()
        self.peripheralBLE = peripheral
        self.peripheralBLE?.delegate = self
        manager.connect(peripheral, options: nil)
        isConnected = true
        print("\(peripheral.name) pre-connected")
    }
}

func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
    lblConnected.isHidden = false
    print("AirPods Connected")
    peripheral.discoverServices(nil)
}
Run Code Online (Sandbox Code Playgroud)

Iva*_*ado 1

这是我当前的实现:

\n\n
import UIKit\nimport CoreBluetooth\n\nvar manager: CBCentralManager!\nvar peripheralBLE: CBPeripheral!\n\nclass ViewController: UIViewController, CBCentralManagerDelegate, CBPeripheralDelegate {\nlet deviceName = "AirPods de Iv\xc3\xa1n"\nvar isConnected = false\n\n\n@IBOutlet weak var Label: UILabel!\n@IBAction func Click(_ sender: UIButton) {\n    self.connect()\n}\n\noverride func viewDidLoad() {\n    super.viewDidLoad()\n    manager = CBCentralManager(delegate: self, queue: nil)\n}\n\noverride func didReceiveMemoryWarning() {\n    super.didReceiveMemoryWarning()\n    // Dispose of any resources that can be recreated.\n}\n\nfunc connect()  {\n    manager.connect(peripheralBLE, options: nil)\n    print("connect")\n    self.updateLabelStatus()\n}\n\nfunc disconnect() {\n    manager.cancelPeripheralConnection(peripheralBLE!)\n    print("disconnect")\n    self.updateLabelStatus()\n}\n\nfunc updateLabelStatus() {\n    switch peripheralBLE.state {\n    case.connected:\n        Label.text = "connected"\n    case.disconnected:\n        Label.text = "disconnected"\n    case.connecting:\n        Label.text = "connecting"\n    case.disconnecting:\n        Label.text = "disconnecting"\n    default:\n        Label.text = "label"\n    }\n}\n\nfunc centralManagerDidUpdateState(_ central: CBCentralManager) {\n    switch manager.state {\n    case.poweredOff:\n        print("BLE service is powered off")\n    case.poweredOn:\n        print("BLE service is powered on and scanning")\n        manager.scanForPeripherals(withServices: nil, options: nil)\n    default:\n        print("BLE service in another state")\n    }\n}\n\nfunc centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {\n    if peripheral.name == deviceName && isConnected == false {\n        print("found AirPods \\(peripheral)")\n        peripheralBLE = peripheral\n        peripheralBLE!.delegate = self\n        manager.stopScan()\n        self.updateLabelStatus()\n    }\n}\n\nfunc centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {\n    print("AirPods Connected")\n    peripheral.discoverServices(nil)\n    self.updateLabelStatus()\n}\n\nfunc centralManager(_ central: CBCentralManager,\n                    didFailToConnect peripheral: CBPeripheral,\n                    error: Error?) {\n    print("AirPods Connect error")\n    print(error)\n    self.updateLabelStatus()\n}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在找到该设备,但当我尝试连接时,没有任何反应\n\nBLE service is powered on and scanning\nfound AirPods <CBPeripheral: 0x1c4103f00, identifier = 0E6FCF72-B86E-FB10-DD62-4A575BAD0ECC, name = AirPods de Iv\xc3\xa1n, state = disconnected>\nconnect

\n\n
    \n
  • 我可以使用此代码连接其他设备
  • \n
  • 我可以使用类似的代码将airpods连接到我的mac,没有任何问题
  • \n
  • 我无法将 Airpods 与我的 iPhone 连接:S
  • \n
\n\n

这里发生了一些奇怪的事情我几乎确定代码是正确的

\n