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

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

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

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

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

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

Solutions Collecting From Web of "Как обнаружить, что уже обнаруженное и сопряженное устройство доступно?"

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

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

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

По моему опыту я отношусь к 3 различным возможностям BT-устройств:

  1. Устройство не связано
  2. Устройство привязано – но не подключено
  3. Устройство связано и связано

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

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

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