2016-12-16 11 views
0

Я пытаюсь перевести разработанное мной приложение для Android, которое находит все периферийные устройства вокруг центрального и возвращает их пользователю. Затем пользователь может подключиться к одному (или более) из них для выполнения других действий.Как найти все известные периферийные устройства BLE вокруг центрального процессора с помощью CoreBluetooth?

Проблема: Как только устройство подключается к CoreBluetooth, оно больше не возвращается во время сканирования. Он должен быть повторно приобретен через список известных устройств, который не дает никакой информации об окрестностях возвращенных устройств.

Есть ли более простой способ, чем пытаться подключиться к каждому известному устройству, чтобы узнать, находится ли он в зоне действия?

EDIT: Известные устройства действительно возвращается во время сканирования, я работал на BLE устройств, которые не имеют такое же имя, рекламу и имя ОПП, которые путают меня, когда пересканирование после первого подключения к устройству :)

+0

если вы были подключены, но потеряли связь из-диапазона, вы можете получить уведомление. Вы не можете использовать это? – ladislas

ответ

0

Вы знаете, что устройство находится в зоне действия, если вы можете увидеть его рекламу.

Есть несколько форм рекламы:

  • Подключаемой
  • Номера соединяемого
  • Подключаемой Directed (Whitelist устройств периферийного готов подключиться к)
  • Номер Подключаемой направлены (Whitelist из устройства, которые могут видеть, когда это периферийное устройство рекламируется, хотя они не могут подключиться к нему)

Некоторые устройства рекламируют только часть услуг, которые они предлагают после подключения. Причиной этого является только 31 байт рекламных данных, которые вы можете отправить, и если вы используете стандартную службу Bluetooth, для каждой службы будет два байта. если вы используете настраиваемую службу, это 16 байт, чтобы рекламировать эту услугу!

Он также может рекламировать свой список услуг, поэтому вы знаете, что вы можете использовать для подключения к нему.

Это означает, что вы должны проанализировать возвращенные рекламные данные; это делается в пределах this Stack Overflow question.

0

Я использую это в Swift 3

при запуске приложения

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

    } 

} 

и после

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


    centralManager.connect(myPeriperal, options: nil) 

} 
+0

Как это может помочь мне узнать, существует ли известное устройство, например, при запуске приложения? – Louis

+0

@Slowbro Посмотрите мое редактирование, я использую его в своем приложении и хорошо работаю. – Rob

 Смежные вопросы

  • Нет связанных вопросов^_^