Разъем Android RFCOMM на фиксированном канале - PullRequest
7 голосов
/ 03 февраля 2011

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

Мое приложение создает прослушивающий сокет, используя listenUsingRfcommWithServiceRecord и UUID 00001101-0000-1000-8000-00805F9B34FB. Затем он вызывает accept () для этого сокета, чтобы дождаться подключения удаленного устройства, но это никогда не происходит.

Я говорил с производителями аппаратного устройства, и они говорят, что их устройство «просто подключится к каналу 1» на удаленном устройстве. то есть он не выполняет обнаружение SDP для определения правильного номера канала. Они отказываются изменить это (хотя это, конечно, неправильно)

Мой вопрос: есть ли способы заставить Android использовать фиксированный номер канала RFCOMM? Может быть, использовать отражение, как уловка прямого вызова createRfcommSocket при подключении к клиенту.

Ответы [ 2 ]

2 голосов
/ 05 октября 2012

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

Максимальное количество каналов - 30, поэтому вы откроете 30 (или меньше) соединений с указанным вами UUID.Теперь с помощью spdtool найдите UUID сокетного соединения с нужным каналом.Закройте эту связь.

Теперь канал, 1 в вашем случае, будет единственным доступным каналом.Подключайтесь к нему так, как вы хотите.Как только соединение будет установлено, закройте все остальные соединения.

Я знаю, что это чертовски хаккей, но в моем случае это сработало!

1 голос
/ 03 февраля 2011

Эти API существуют, но не поддерживаются.Если вы все еще заинтересованы, проверьте исходный код для исходного кода Android 1.5 для android.bluetooth .

Имейте в виду, однако, что как неподдерживаемые API они могут быть удалены в любом будущем выпуске.

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