2017-09-05 195 views
0

我只想得到周圍的任何藍牙設備列表,但CoreBluetooth只顯示藍牙低功耗(4.0。掃描任何藍牙設備在iOS

我不想連接到設備,只是顯示其名稱。

是否有解決方案做到這一點?

回答

0

你想要做的是爲您掃描區域內所有CBPeripheral什麼。CBPeripheral是確實的廣播任何CBService的類(s)外設可能做廣告。

要掃描這些外設,您需要一個CBCentralManager的實例。 CBCentralManager是您的外圍設備掃描的類。

要做到這一點,你必須實例化CBCentralManager

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

一個好主意是在掃描前外設告訴你CBCentralManager,你只需要尋找獨特的外設只有一次。

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

當你告訴你的CBCentralManager掃描,不指定廣告CBPeripheral(S)的任何服務。反而通過nil這個參數來表明你想發現所有的外設。

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

上述調用將開始實際掃描該區域的藍牙設備。您將在掃描結果中收到CBCentralManagerDelegate方法中的回調。


爲了讓藍牙設備,簡單的看一下所發現的CBPeripheral(一個或多個)的名稱的名稱。您通過CBCentralManagerDelegate方法didDiscover peripheral: CBPeripheral來完成此操作。

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { 
    print("Discovered \(peripheral.name ?? "")") 
} 
0
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 
} 
0

我使用這樣的,連接按鈕單擊事件,並使用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) 
     } 
    }