Android Bluetooth accept () / connect () с уже сопряженными устройствами

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

Вот последовательность действий на стороне сервера:

  1. Проверить различные статусы Bluetooth (адаптер доступен, включен и т. Д.).
  2. вызывают listenUsingRfcommWithServiceRecord () с предварительно определенным UUID, который я выбрал.
  3. запрос сделать устройство доступным для обнаружения
  4. , поскольку обнаружение происходит асинхронно, я вызываю accept () и жду входящего соединения.

На стороне клиента:

  1. Проверить различные статусы Bluetooth (адаптер доступен, включен и т. Д.).
  2. для каждого устройства в getBondedDevices () я сравниваю getName () с именем сервера. Если есть совпадение, перейдите к шагу 6. ​​
  3. Начать обнаружение BT
  4. Для каждого обнаруженного устройства (обратите внимание, что сопряженные устройства из 2a здесь не отображаются) сравните имя устройства с именем сервера. Если есть совпадение, перейдите к шагу 6. ​​
  5. Отменить обнаружение
  6. На устройстве, которое было найдено на шаге 2, вызовите createRfcommSocketToServiceRecord () с тем же предопределенным UUID, который использовался на стороне сервера.
  7. Вызовите connect () и дождитесь, пока он вернет подключенный сокет.

Вышеупомянутый процесс отлично работает для меня, когда клиент и сервер никогда раньше не работали в паре. Однако после того, как Android зарегистрирует их в списке устройств, на этапе connect () / accept () неизбежно произойдет тайм-аут.

Я искал решение уже пару дней и попробовал довольно много вещей, включая это: Подключение к уже сопряженному устройству Bluetooth

Метод отражения у меня тоже не работает. Кажется, что connect () вернется немедленно, но когда я попытался вызвать getOutputStream (), я получил исключение. На стороне accept () он даже не регистрирует, что кто-то пытался подключиться. Мне серьезно нужна помощь или указатель, как заставить устройства устанавливать соединение после того, как они были сопряжены ранее.

Вот некоторая информация об устройствах:

  • Я тестирую сервер и клиент на двух телефонах LG G2X.
  • Оба они работают на Android 2.3.3, что соответствует уровню API 10.
  • Опять же, вышеупомянутое работает после того, как я отключил устройства вручную в настройках.

Заранее благодарю. Мне около двух недель в Android и Bluetooth, поэтому, если вы видите какие-либо пропущенные шаги или передовые методы, укажите их также.

6
задан anticafe 25 August 2017 в 08:56
поделиться