EAAccessory.Name не совпадает с именем сопряженного устройства - PullRequest
0 голосов
/ 13 июня 2018

У меня есть приложение для iOS.Я могу успешно подключиться к своему парному EAAccessory (Bluetooth Classic).Я могу получить информацию с устройства, которое открывается через объект EAAccessory.Одна вещь, которую я заметил, состоит в том, что имя устройства, которое сопряжено (в моих Настройках -> Bluetooth -> Список моих устройств), не совпадает с именем устройства, которое выставляет мой объект EAAccessory.Я нахожу это очень странным.

Есть ли какой-нибудь способ получить фактическое имя устройства (имя со страницы настроек) через мое приложение для iOS?

Ответы [ 2 ]

0 голосов
/ 21 июня 2018

Вы не упомянули, является ли это Bluetooth Classic или BLE ?, мой ответ ниже для bluetooth Classic, я помню, я видел нечто подобное раньше, вот мои выводы до сих пор:

Возьмитепосмотрите Руководство по проектированию аксессуаров , разделы 2.1.5 и 2.1.8, в частности.

2.1.5:

Во времяВ процессе обнаружения Bluetooth продукт Apple предпочитает отображать понятное имя обнаруженных аксессуаров.Перед версией спецификации Bluetooth версии 2.1 продукт Apple должен был бы установить соединение с аксессуаром и выполнить запрос удаленного имени, который потребляет энергию, время антенны и время пользователя.Функция расширенного ответа на запрос, представленная в Bluetooth 2.1, позволяет дополнительному устройству отправлять свое локальное имя и другую информацию как часть ответа на запрос и, таким образом, повышает скорость и эффективность процесса обнаружения.Локальное имя должно соответствовать маркировке и упаковке аксессуара и не должно содержать «:» или «;».

Также см. Раздел «Класс устройства»

2.1.8:

Каждый аксессуар, совместимый с продуктом Apple, должен точно установить свой класс устройства, используя Bluetooth SIG, определяемый класс основного устройства и вспомогательный класс устройства.См. Том 3, часть C, раздел 3.2.4 в спецификации ядра Bluetooth, версия 5.0.Например, аудио / видео аксессуар, предназначенный для работы в транспортном средстве, должен установить для Major Device Class значение аудио / видео, а для Minor Device Class - автомобильное аудио.

В вашем случае может быть только тот факт, чтоу аксессуара есть понятное имя, и iOS не очистила кэш для имени в тот момент для настроек, или это может быть ошибочная реализация на стороне прошивки.

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

0 голосов
/ 21 июня 2018

Можно получить список сопряженных / подключенных устройств, если у вас есть UUID их рекламы.

var centralQueu = DispatchQueue(label: "A_NAME")
centralManager = CBCentralManager(delegate: self, queue: centralQueu, options: [CBCentralManagerOptionRestoreIdentifierKey: "RESTORE_KEY", CBCentralManagerOptionShowPowerAlertKey: true])
ServiceUUIDs = [CBUUID(string: "THE_UUID")]
//the array of CBUUIDs which you are looking for

Вам необходимо найти UUID службы, в которой вы заинтересованы:

var options = [
    CBCentralManagerScanOptionAllowDuplicatesKey : (1)
]
centralManager.scanForPeripherals(withServices: [CBUUID(string: SERVICE_UUID)], options: options)

centralManager.retrieveConnectedPeripherals(withServices: ServiceUUIDs)

обрабатывать didDiscoverperipheral таким образом:

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    discoveredPeripheral = peripheral
    if !mRemoteDevices.contains(discoveredPeripheral) {
        let peripherels = centralManager.retrievePeripherals(withIdentifiers: [discoveredPeripheral.identifier])
        mRemoteDevices.append(peripherels[0])
    }
}

этот код преобразуетсяот цели C к быстрой, если вы знакомы с задачей C, тогда исходный код здесь.

...