2017-08-27 7 views
0

Ich verwende das CoreBluetooth-Framework in meiner iOS-Anwendung zum Scannen und Verbinden mit anderen Bluetooth-Geräten. Ich bin in der Lage erfolgreich für Geräte unter Verwendung von Code zu scannen:CoreBluetooth zum Abrufen von Gerätenamen mit Swift

var centralManager: CBCentralManager? 
var peripherals = [CBPeripheral]() 
centralManager = CBCentralManager(delegate: self, queue: DispatchQueue.main) 

Im CBCentralManagerDelegate, ich unten Code implementiert:

extension ViewController: CBCentralManagerDelegate { 
    func centralManagerDidUpdateState(_ central: CBCentralManager) { 
     if (central.state == .poweredOn){ 
      self.centralManager?.scanForPeripherals(withServices: nil, options: nil) 
     } 
    } 

    func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { 

     if !peripherals.contains(peripheral) { 
      let localName = advertisementData[CBAdvertisementDataLocalNameKey] 
      print("\(String(describing: localName))") 
      peripherals.append(peripheral) 
      tableView.reloadData()    
     } 
    } 
} 

Von oben Code local immer gleich Null ist. Fehle ich irgendeinen Code?

Um weitere Informationen hinzuzufügen,
Wenn ich auf meinem Mac nach Bluetooth-Geräten scanne, kann ich die Namen der Geräte sehen. Aber wenn ich auf meinem iPhone nach Bluetooth-Geräten scanne, ist keines von ihnen aufgelistet.

quere ich geprüft und sorgte dafür, dass ich blaue Zahn auf 4 weitere Geräte mit mir (iPad 2 Android-Telefone und 1 Android TV)

+0

Überprüfen Sie, ob 'advertisementData [CBAdvertisementDataLocalNameKey]' existiert, bevor Sie 'peripherals.append (peripheren)'. Die Sache ist, dass die Werbepakete Stück für Stück (wegen der Begrenzungsgröße) gemacht werden können, und die volle Werbung kommt später. – Larme

+0

Danke @Larme, ich werde diesen Scheck hinzufügen. Ich habe einige andere Apps von iTunes untersucht und alle zeigen anstelle von Namen Bezeichner. Ist es nicht möglich, die Namen der Geräte in iOS abzurufen? – Satyam

Antwort

0

ich in Ihrem Code geändert aktiviert einzige Quelle des Namens - statt:

let localName = advertisementData[CBAdvertisementDataLocalNameKey]

ich benutze:

let localName = peripheral.name

und jetzt ich Namen von BLE-Geräten um mich herum.

+0

Ich habe das auch versucht. Für mich ist peripherer Name auch null – Satyam

0

Swift 3 mit Kern bluetooth Bibliothek:

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber){ 

    let peripheralLocalName_advertisement = ((advertisementData as NSDictionary).value(forKey: "kCBAdvDataLocalName")) as? String 

    if (((advertisementData as NSDictionary).value(forKey: "kCBAdvDataLocalName")) != nil) 

     print(peripheralLocalName_advertisement)//peripheral name from advertismentData 

     print(peripheral.name)//peripheral name from peripheralData 

     peripherals.append(peripheral) 

     arrayPeripheral.append(advertisementData) 
    } 
} 
Verwandte Themen