繁体   English   中英

在iOS上扫描任何蓝牙设备

[英]Scan any Bluetooth Devices on iOS

我只想获取我周围所有蓝牙设备的列表,但CoreBluetooth仅显示低功耗蓝牙(4.0。

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

有解决方案吗?

您要做的是扫描您所在区域的所有CBPeripheral CBPeripheral是用于广播外围设备可能播发的任何CBService的类。

要扫描这些外围设备,您将需要一个CBCentralManager实例。 CBCentralManager是执行外围设备扫描的类。

为此,您必须实例化CBCentralManager

centralManager = CBCentralManager(delegate: self, queue: .main)

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

let options: [String: Any] = [CBCentralManagerScanOptionAllowDuplicatesKey: 
                              NSNumber(value: false)]

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

centralManager?.scanForPeripherals(withServices: nil, options: options)

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


要获取蓝牙设备的名称, CBPeripheral发现的CBPeripheral设备的名称CBPeripheral 您可以通过CBCentralManagerDelegate方法didDiscover peripheral: CBPeripheral

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

我这样使用,单击按钮时连接事件并使用CBCentralManagerDelegate, CBPeripheralDelegate委托

func connectDevice(sender:UIButton){


                if peripheral != nil {
                    manager.cancelPeripheralConnection(peripheral)
                    manager = CBCentralManager(delegate: self, queue: nil)
                }
        }



 func centralManagerDidUpdateState(central: CBCentralManager) {
        if central.state == CBCentralManagerState.PoweredOn {
            central.scanForPeripheralsWithServices(nil, options: nil)
        } else {
            self.showAlert(Messages().alert , message: "Bluetooth is not on.")
        }
    }



 func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String : AnyObject], RSSI: NSNumber) {
        let device = (advertisementData as NSDictionary).objectForKey(CBAdvertisementDataLocalNameKey) as? NSString
        print(device)

        if device?.containsString(BEAN_NAME) == true {
            self.manager.stopScan()
            self.peripheral = peripheral
            self.peripheral.delegate = self
            manager.connectPeripheral(peripheral, options: nil)
        }
    }
if (!_centralManager) {
        dispatch_queue_t queue = dispatch_get_main_queue();
        _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:queue options:@{CBCentralManagerOptionShowPowerAlertKey:@YES}];
        [_centralManager setDelegate:self];
    }

//found BLE
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    //Array add peripheral
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM