Я пытаюсь разработать приложение для 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