У меня проблемы с подключением двух Android-устройств через Bluetooth, что случается только тогда, когда они уже были сопряжены ранее. Я использую один как сервер, а другой как клиент.
Вот последовательность действий на стороне сервера:
- Проверить различные статусы Bluetooth (адаптер доступен, включен и т. Д.).
- вызывают listenUsingRfcommWithServiceRecord () с предварительно определенным UUID, который я выбрал.
- запрос сделать устройство доступным для обнаружения
- , поскольку обнаружение происходит асинхронно, я вызываю accept () и жду входящего соединения.
На стороне клиента:
- Проверить различные статусы Bluetooth (адаптер доступен, включен и т. Д.).
- для каждого устройства в getBondedDevices () я сравниваю getName () с именем сервера. Если есть совпадение, перейдите к шагу 6.
- Начать обнаружение BT
- Для каждого обнаруженного устройства (обратите внимание, что сопряженные устройства из 2a здесь не отображаются) сравните имя устройства с именем сервера. Если есть совпадение, перейдите к шагу 6.
- Отменить обнаружение
- На устройстве, которое было найдено на шаге 2, вызовите createRfcommSocketToServiceRecord () с тем же предопределенным UUID, который использовался на стороне сервера.
- Вызовите connect () и дождитесь, пока он вернет подключенный сокет.
Вышеупомянутый процесс отлично работает для меня, когда клиент и сервер никогда раньше не работали в паре. Однако после того, как Android зарегистрирует их в списке устройств, на этапе connect () / accept () неизбежно произойдет тайм-аут.
Я искал решение уже пару дней и попробовал довольно много вещей, включая это:
Подключение к уже сопряженному устройству Bluetooth
Метод отражения у меня тоже не работает. Кажется, что connect () вернется немедленно, но когда я попытался вызвать getOutputStream (), я получил исключение. На стороне accept () он даже не регистрирует, что кто-то пытался подключиться. Мне серьезно нужна помощь или указатель, как заставить устройства устанавливать соединение после того, как они были сопряжены ранее.
Вот некоторая информация об устройствах:
- Я тестирую сервер и клиент на двух телефонах LG G2X.
- Оба они работают на Android 2.3.3, что соответствует уровню API 10.
- Опять же, вышеупомянутое работает после того, как я отключил устройства вручную в настройках.
Заранее благодарю. Мне около двух недель в Android и Bluetooth, поэтому, если вы видите какие-либо пропущенные шаги или передовые методы, укажите их также.
задан anticafe 25 August 2017 в 08:56
поделиться