Bluecove: проверьте, сопряжено ли устройство?

Я новичок в использовании Bluecove API, и кажется, что после долгих исследований я все еще не могу найти способ проверить, уже ли RemoteDevice подключен к работающей машине или нет.

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

Чтобы быть более точным, я «перевожу» проект, который я разработал на С#, используя InTheHand.dll для управления Bluetooth. Эта сборка великолепна и помогла мне достичь того, чего я хотел: сканировать устройства в режиме обнаружения и в диапазоне, инициировать процесс сопряжения, обрабатывать данные через Bluetooth streams. Мне нужно сделать то же самое с Bluecove.

Почему так сложно найти ответы? В документации почти ничего не говорится о сопряжении, хотя мне удалось соединить устройство, которое, как я знал, не было сопряжено через RemoteDevice.authenticate().

Во всяком случае, чтобы подвести итог:

  1. Как запустить сканирование только устройств в режиме обнаружения?
  2. Как узнать, было ли уже сопряжено устройство или нет?

Примечание: использование как RemoteDevice.isAuthenticated(), так и RemoteDeviceHelper.implIsAuthenticated(remoteDevice) всегда возвращает false независимо от статуса пары.

Примечание 2. Кроме того, просмотрев RemoteDeviceHelper.javafrom http://bluecove.googlecode.com/svn/trunk/bluecove/src/main/java/com/intel/bluetooth/RemoteDeviceHelper.java , для boolean paired существует частная собственность.

Кажется, ни один общедоступный метод не будет использовать его...

Еще более странно и отчаянно неприятно то, что в режиме отладчика, глядя на конкретный RemoteDevice, я вижу значение этого свойства. Это действительно ложно, если устройство не сопряжено, и верно, если устройство сопряжено! Почему API не может сообщить мне об этом?

Что я должен делать ? Спасибо за помощь !


person Mackovich    schedule 26.02.2015    source источник


Ответы (1)


Список сопряженных устройств:

import javax.bluetooth.*
...
RemoteDevice[] rdList = LocalDevice.getLocalDevice().getDiscoveryAgent().retrieveDevices(DiscoveryAgent.PREKNOWN);

Получить имя и адрес сопряженного устройства:

rdList[0].getBlueToothAddress();
rdList[0].getFriendlyName(true);

Некоторые комментарии:

  1. список сопряженных устройств может содержать несколько устройств с одинаковым именем
  2. логический параметр getFriendlyName() означает, должен ли агент запрашивать имя устройства, но возвращает кешированное имя, если устройство недоступно (по крайней мере, мои тесты показали это)
person JozefS    schedule 10.01.2016