У меня проблемы с подключением двух устройств 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.
- Опять же, вышеописанное работает после того, как я вручную отключил устройства в настройках.
Спасибо заранее. Мне около 2-х недель в Android и Bluetooth, поэтому, если вы видите какие-либо пропущенные шаги или лучшие практики, пожалуйста, укажите их также.