Bluetooth соединение работает только в первый раз - PullRequest
1 голос
/ 22 марта 2011

Я пытаюсь разработать приложение для Android для медицинского устройства с использованием Bluetooth (SPP). Я использовал BluetoothChat в качестве отправной точки (см. Также ранее ). Теперь я думаю, что столкнулся со странной проблемой, и у меня также есть проблемы с ее описанием. Тестирование на Nexus S.

По завершении измерения медицинское устройство проверяет в своей памяти адрес Bluetooth и другую информацию о ранее сопряженном устройстве. Если он найден, он попытается установить соединение (пока приложение на телефоне прослушивает соединение), а затем передаст данные, в противном случае он начнет процедуру запроса.

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

В остальное время он не работает: после измерения я вижу в LogCat, что телефон получает сигнал (как и в первый раз) от устройства, поэтому я знаю устройство сохранил телефоны с адресом Bluetooth. Похоже, что система игнорирует сигнал (или, по крайней мере, ничего не происходит), соединение не установлено, и, следовательно, данные не передаются, хотя я использую accept -метод BluetoothServerSocket так же, как когда он работает. Если я удаляю запись сопряжения из телефона, этот сигнал запускает процедуру сопряжения, и устройства снова подключаются, НО они все равно не установят соединение и не передадут данные. Я думаю, что сообщение о сигнале представляет собой попытку установить соединение, но что-то не так. Сообщение в журнале такое же, как при успешном соединении, и его можно увидеть в LogCat:

03-22 14: 21: 55.335: ОШИБКА / BluetoothEventLoop.cpp (114): event_filter: полученный сигнал org.bluez.Device: PropertyChanged from / org / bluez / 4123 / hci0 / dev_00_A0_96_2D_05_E8

Это довольно запутанно, это сообщение об ошибке и присутствует в журнале, когда он работает также.

Странная вещь заключается в том, что это работает в первый раз, когда они успешно соединены, но никогда после этого. Когда данные передаются и устройство получает ACK, оно сохраняет адрес Bluetooth «и другую полезную информацию». Единственный способ воспроизвести успешное «первое время» - это подключить медицинское устройство к другому устройству, а затем снова подключить его к приложению на телефоне.

Я не совсем понимаю, что на самом деле вызывает эту проблему. У кого-нибудь есть подсказка?

Боюсь, что моя проблема немного специфична, чтобы быть знакомой другим, если проблема вызвана медицинским устройством, а не телефоном. Я думал, что это может быть связано с ключом ссылки или каналом? Но с другой стороны, как я уже сказал, если я удалю сопряжение с телефона, я снова получу запрос на сопряжение.

Медицинское устройство старое с использованием Bluetooth 1.2. Теперь мне кажется, что я должен посмотреть, есть ли какие-либо проблемы, связанные с подключением, из-за этого. Может ли быть, что устройство, использующее Bluetooth 1.2, имеет другую политику, какую информацию хранить при сопряжении?

В настоящий момент я чувствую, что борюсь с проблемой, которую я не до конца понимаю, но если я пойму позже, я, конечно, вернусь с моими выводами. Надеюсь, я не забыл важные детали.

Заранее спасибо / F

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Здравствуйте, fredricus Моя проблема похожа на вашу, я использую службу Bluetooth, которая продолжает прослушивать данные, когда Bluetooth включен. Вы решили проблему подключения устройства Android к медицинскому устройству, как вы упоминали, что вы использовали отражение.Но в случае, если медицинское соединение инициирует соединение, оно сможет подключиться к устройству Android.

0 голосов
/ 22 марта 2011

Похоже, проблема в том, что медицинское устройство не может восстановить соединение (т. Е. Выполнить повторную проверку подлинности) с уже сопряженным устройством. Я не думаю, что существо 1.2 должно иметь значение. Процедуры разработаны для обеспечения обратной совместимости, поэтому все версии Bluetooth работают друг с другом. Возможно, вам придется получить след Bluetooth-анализатора , чтобы проверить, что может происходить в эфире, и это подтвердит, если проблема возникла на стороне медицинского устройства.

Другой вариант - проверить, есть ли у Android способ включить более подробную регистрацию взаимодействий Bluetooth и включить его. Журнал сообщений Android по умолчанию очень высокого уровня и не дает много подробностей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...