Найти уже подключенные устройства Bluetooth автоматически, когда они находятся в зоне действия

Я не специалист по Bluetooth и не знаю, какие возможности доступны для поиска уже сопряженных устройств Bluetooth автоматически, когда они находятся рядом друг с другом.

Фон: В нашем случае Android-приложение должно подключаться к выделенному аксессуару через Bluetooth (Rfcomm). Оба устройства известны друг другу (они сопряжены). Приложение Android регистрирует широковещательный приемник. Во время запуска приложения приложение инициирует обнаружение, чтобы найти выделенный аксессуар. Если аксессуар находится в радиусе действия, все отлично работает.

Проблема: Пользователь запускает приложение вне диапазона выделенного аксессуара. Приложение Android пытается найти аксессуар без успеха. Затем пользователь переходит в диапазон Bluetooth-аксессуаров. Широковещательный приемник не получит уведомление об аксессуаре, находящемся в зоне действия.

Похожие темы/возможные решения Аналогичные вопросы уже задавались в stackoverflow (например, автоподключиться к устройству Bluetooth в диапазоне). Но постоянно пытаться обнаружить Bluetooth-устройства в радиусе не то, что я ищу, потому что это вызовет слишком большой отток аккумулятора Android-устройства.

Другим решением было бы попытаться подключиться к сопряженному устройству в методе onResume Activity. Это будет работать, но имеет тот недостаток, что приложение can not работает в фоновом режиме. Таким образом, пользователь должен был принести приложение по крайней мере один раз на передний план, чтобы инициировать соединение.

Третья идея, о которой я думал, - это реализовать серверный сокет в приложении Android. Когда приложение Android запускается и открытие завершается без успеха, приложение Android может создать сокет сервера и прослушивать входящие уведомления об аксессуаре. Это поможет в некоторых сценариях (например, пользователь начинает свое приложение, подходит к аксессуару, активирует аксессуар, а аксессуар уведомляет приложение при запуске, что он находится в зоне действия). Но это все равно не 100% -ное решение, потому что оба устройства могут запускаться вне диапазона друг друга. Также было бы обязательным реализовать дополнительные функции (разъем Bluetooth-сервера на устройстве Android...).

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

Спасибо за любую помощь!

Ответ 2

После первого подключения устройства сохраните MAC-адрес в локальном списке. При отключении используйте connectGatt с автоматическим подключением, установленным в true, для автоматического повторного подключения, когда вы находитесь в зоне действия.