在 iOS 上扫描任何蓝牙设备

Val*_*ier 4 bluetooth ios swift

我只想获取我周围任何蓝牙设备的列表,但 CoreBluetooth 仅显示低功耗蓝牙 (4.0.0.0)。

我不想连接到设备,而只想显示其名称。

有没有办法做到这一点?

Bra*_*n A 7

您想要做的是扫描CBPeripheral您所在地区的所有内容。CBPeripheral广播CBService外围设备可能通告的任何(多个)的类。

要扫描这些外围设备,您需要一个CBCentralManager. CBCentralManager是对外围设备进行扫描的类。

为此,您必须实例化您的 CBCentralManager

centralManager = CBCentralManager(delegate: self, queue: .main)
Run Code Online (Sandbox Code Playgroud)

一个好主意是在您扫描外围设备之前告诉您CBCentralManager您只想发现唯一的外围设备一次。

let options: [String: Any] = [CBCentralManagerScanOptionAllowDuplicatesKey: 
                              NSNumber(value: false)]
Run Code Online (Sandbox Code Playgroud)

并且当您告诉您CBCentralManager扫描时,请不要指定广告的任何服务CBPeripheral。而是传递nil此参数以指示您要发现所有外围设备。

centralManager?.scanForPeripherals(withServices: nil, options: options)
Run Code Online (Sandbox Code Playgroud)

上述调用将开始对该区域内的蓝牙设备进行实际扫描。您将在CBCentralManagerDelegate方法中收到对扫描结果的回调。


要获取蓝牙设备的名称,只需查看CBPeripheral发现的(s)名称即可。你通过CBCentralManagerDelegate方法来做到这一点didDiscover peripheral: CBPeripheral

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    print("Discovered \(peripheral.name ?? "")")
}
Run Code Online (Sandbox Code Playgroud)