2017-09-05 4 views
0

Je veux juste obtenir une liste des des périphériques Bluetooth autour de moi, mais l'affichage CoreBluetooth uniquement. Bluetooth Low Energy (4,0Analyser les périphériques Bluetooth sur iOS

Je ne veux pas vous connecter à un périphérique, mais juste afficher son nom.

y at-il une solution pour le faire?

Répondre

0

Qu'est-ce que vous voulez faire est d'analyser tous les CBPeripheral dans votre région. CBPeripheral est la classe qui fait la diffusion de toute CBService (s) que le périphérique peut faire de la publicité.

Pour rechercher ces périphériques, vous avez besoin d'une instance de CBCentralManager. CBCentralManager est la classe qui fait le balayage de vos périphériques.

Pour ce faire, vous devez instancier votre CBCentralManager

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

Une bonne idée est avant de numériser pour les périphériques de dire à votre CBCentralManager que vous voulez seulement pour découvrir des périphériques uniques qu'une seule fois.

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

Et quand vous dites à votre CBCentralManager à analyser, ne précisent pas les services de la publicité CBPeripheral (s). Au lieu de cela passez nil pour ce paramètre pour indiquer que vous voulez découvrir tous les périphériques. L'appel ci-dessus commencera le balayage actuel des dispositifs Bluetooth dans la zone. Vous recevrez le rappel dans les méthodes CBCentralManagerDelegate au résultat de votre analyse.


Pour obtenir le nom des périphériques Bluetooth, simple regard sur le nom du CBPeripheral (s) qui sont découverts. Pour ce faire, utilisez la méthode CBCentralManagerDelegatedidDiscover 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

J'utilise comme ça, se connecter sur le bouton événement click et utiliser CBCentralManagerDelegate, CBPeripheralDelegate délégué

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) 
     } 
    }