Android Bluetooth принимает () / 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, поэтому, если вы видите какие-либо недостающие шаги или лучшие практики, укажите их также.

В клиенте, когда я пытаюсь подключиться к связанному устройству, я просто вызвал его на BluetoothDevice, который я нашел в BluetoothAdapter.getBondedDevices() . Это не работает.

Чтобы правильно установить соединение Bluetooth, мне пришлось сделать что-то похожее на псевдокод ниже:

 BluetoothDevice bonded = a device from BluetoothAdapter.getBondedDevices(); BluetoothDevice actual = BluetoothAdapter.getRemoteDevice(bonded.getAddress()); BluetoothSocket socket = actual.createRfcommSocketToServiceRecord(SOME_UUID); socket.connect(); 

Я пришел к этому ответу, следуя примеру Bluetooth-чата: Bluetooth Chat Service . Почему это не работает на устройстве из getBondedDevices() , вне меня. Возможно, кто-то с более глубокими знаниями Android может ответить на это.

Посмотрите этот пример: http://developer.android.com/resources/samples/BluetoothChat/index.html .

Это может объяснить, как подключено устройство bluetooth и передавать информацию.

Intereting Posts
Qt для Android – эквивалент startActivityForResult не работает Воспроизведение аудиоклипа на текущем вызове Gson Exception при десериализации (конструктор no-args не существует) Консоль разработчика Google Play отклонила мое обновление приложения Как отключить автоматическое выравнивание? Доступ к андроиду: атрибут installLocation manifest Безопасное хранение симметричного ключа при использовании Android KeyChain Минимальная цель должна быть меньше 14 при использовании WindowManager.LayoutParams.TYPE_KEYGUARD Как использовать ExecutorService с Android AsyncTask? Ошибка или функция в android.util.Log? – Log.isLoggable (DEBUG) = false, но Log.d () не отключен Как сделать epub-ридер для Android и отображать? Нижнее поле или отступы не работают в относительной компоновке в xml на Android GridView с динамическим числом столбцов в каждой строке Представление приложения для Android НЕОПРЕДЕЛЕННОЕ ТОП-УРОВЕННОЕ ИСКЛЮЧЕНИЕ: несколько файлов dex определяют