Подтвердить что ты не робот

Как обнаружить, что уже обнаруженное и сопряженное устройство доступно?

Я уже открыл другое устройство, и я уже связал его. По крайней мере, у меня есть это в списке парных устройств на моем телефоне Android.

Теперь на BluetoothSocket.connect() могут возникнуть две проблемы:

  • Удаленное устройство отключено или иным образом недоступно
  • Удаленное устройство забыло о спаривании, поскольку оно может соединяться только с одним другим устройством и было сопряжено с другим телефоном

    = > Затем соединение завершается с ошибкой после определенного таймаута.

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

4b9b3361

Ответ 1

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

Другими способами можно заставить пользователя подтвердить их перед подключением или использовать внешний канал TCP/IP или WiFi или NFC. Если ни одна из тех магических сил не станет единственной альтернативой.: -)

Ответ 2

  • Вспомнить подключенное устройство на самом деле просто. После успешной привязки к устройству вы получите объект BluetoothDevice. вы можете узнать его уникальный адрес mac с getAddress(). Как только у вас есть адрес, сохраните его в соответствии с общим предпочтением. это касается "было ли это сопряжено" - в следующий раз, когда мы используем BluetoothAdapter и получим список связанных устройств, мы можем искать среди них сохраненный адрес устройства.
  • Теперь, когда мы знаем точный адрес устройства, как мы можем определить, действительно ли он "действительно доступен"? Ну, если вам достаточно попробовать обнаружить устройство (startDiscovery ()), чтобы проверить, доступно ли это на уровне обнаружения, тогда вы знаете трюк (элемент списка 1). Если вы обнаружили, что устройство доступно для обнаружения и, вам необходимо протестировать устройство для полной связи, вам нужно будет открыть новый сокет и посмотреть, будет ли он плавным.

По моему опыту я рассматриваю 3 разных возможных ситуации с BT-устройствами:

  • Устройство не связано
  • Связано устройство - но не подключено
  • Связанный с устройством

Ответ 3

Вы можете получить уже подключенный список устройств и перекрестно проверить их с помощью текущих устройств для обнаружения. Таким образом, вы получите уже сопряженные устройства, находящиеся в режиме обнаружения.

Но для неоткрытых устройств обязательно вы должны связаться с ними. Попробуйте создать соединение сокетов между ними, если данные успешно отправлены удаленным устройством.

Также вы можете использовать getBondState() удаленного устройства для проверки состояния связи и зарегистрировать приемник ACTION_BOND_STATE_CHANGED для получения обратного вызова изменений состояния связи.