2016-12-16 1 views
0

Je suis en train de traduire une application Android que j'ai développée qui trouve tous les périphériques autour de la centrale et les renvoie à l'utilisateur. Ensuite, l'utilisateur peut se connecter à un (ou plusieurs) d'entre eux pour faire d'autres choses.Comment trouver tous les périphériques BLE connus autour de la centrale en utilisant CoreBluetooth?

Problème: Une fois qu'un périphérique est connecté à CoreBluetooth, il n'est plus renvoyé lors d'une analyse. Il doit être ré-acquis à travers la liste des appareils connus qui ne donne aucune information sur le voisinage des appareils retournés.

Y a-t-il un moyen plus simple que d'essayer de se connecter à chaque périphérique connu pour savoir s'il est à portée?

EDIT: Les dispositifs connus sont en effet retournés lors d'une analyse, je travaillais sur les appareils BLE qui n'ont pas le même nom de la publicité et le nom GAPP, qui me confondre quand une nouvelle analyse après la première connexion à un dispositif :)

+0

si vous avez été connecté, mais a perdu la connexion à cause de la plage, vous pouvez recevoir une notification Tu ne peux pas utiliser ça? – ladislas

Répondre

0

Vous connaissez un appareil est dans la gamme si vous pouvez le voir de la publicité.

Il existe de multiples formes de publicité:

  • Connectable
  • non connectable
  • Connectable Directed (liste blanche des dispositifs périphérique est prêt à se connecter à)
  • non connectables dirigé (liste blanche de les périphériques qui peuvent voir quand ce périphérique fait de la publicité, même s'ils ne peuvent pas s'y connecter)

Certains appareils n'annoncent qu'un sous-ensemble des services qu'ils proposent une fois que vous vous êtes connecté. La raison en est qu'il n'y a que 31 octets de données publicitaires que vous pouvez envoyer, et que si vous utilisez un service standard Bluetooth, il y aura deux octets pour chaque service. Si vous utilisez un service personnalisé, il suffit de 16 octets pour annoncer ce service!

Il peut également annoncer sa liste de services, vous savez donc ce que vous pouvez utiliser pour vous y connecter. Cela signifie que vous devez analyser les données publicitaires renvoyées; cela est dans le domaine de this Stack Overflow question.

0

J'utiliser dans Swift 3

lors du démarrage de l'application

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { 
    let perip = peripheral.identifier.uuidString 

    if !perip.isEmpty { 

     if peripheral == myPeriperal { 


      print("myPeriperal Ok") 
     } 


    }else{ 
     print("no ble") 

    } 

} 

et après

func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { 


    centralManager.connect(myPeriperal, options: nil) 

} 
+0

Comment cela peut-il m'aider à savoir si un appareil connu est à portée lors du démarrage de l'application par exemple? – Louis

+0

@Slowbro Regardez mon édition, je l'utilise sur mon application et fonctionne bien. – Rob