Автоматическое подключение к сопряженному устройству bluetooth в диапазоне
цель:
Я пытаюсь сделать мой Android-сервис для автоматического подключения к уже сопряженное устройство bluetooth, когда его в диапазоне.
пример:
У меня есть iPhone в паре с моей машиной. Когда я сажусь в машину музыка начинает автоматически играть. Мне не нужно подключать его снова. Я не нужно начинать песню. Он просто запускает itunes и начинает играть музыка. Я хочу такого. подключение в моем приложении Android.
одним из очевидных решений является наличие потока, работающего в фоновых службах, который пытается подключиться каждые X секунд. Однако это не является оптимальным из-за потери времени автономной работы.
Я попытался настроить широковещательные приемники, чтобы получить срабатывание на ACTION_ACL_CONNECTED
но это, кажется, вызывается только после подключения к устройству.
нет ли способа, которым мое приложение может получить уведомление, когда телефон входит в диапазон устройство?
Я провел большую часть последних двух дней, пытаясь заставить это работать без успеха. Есть миллиард учебников о том, как подключиться к устройству bt, но нет автоматического подключения, когда в диапазоне. Начинаю сомневаться, возможно ли это.. Я буду поражен, если его нет : (
вопросы:
найти уже сопряженные устройства bluetooth автоматически, когда они находятся в диапазоне
2 ответов
насколько я знаю, нет возможности автоматически подключаться к общему устройству Bluetooth, как только оно находится в диапазоне. Лучше всего иметь цикл запроса, периодически запрашивая доступные устройства и подключаясь к тем, с которыми вы связаны (хотя, как вы сказали, это довольно интенсивно батареи).
однако, если ваше устройство (как телефон, так и периферийное) поддерживает Bluetooth 4.0 (LE), а также GATT, вы можете использовать connectGatt метод автоматическое подключение, как только устройство становится доступным (опять же, не слишком уверен в последствиях батареи, хотя ограниченное тестирование я сделал до сих пор показывает, что это не важно).
Я не совсем уверен, что поведение connectGatt
когда устройство не является ГАТТ, но, возможно, стоит исследовать - я предполагаю, что вы получите обратный вызов со статусом GATT_FAILURE
когда устройство становится в диапазоне, но не поддерживает GATT (это, по крайней мере, даст вам индикация времени подключения).
Если вы найдете решение или исследуете поведение этого метода на устройствах, отличных от LE / non-GATT, пожалуйста, обновите свой вопрос, поскольку мне было бы любопытно узнать больше об этом.
Как упоминалось ранее, нет простого способа сделать это с помощью Bluetooth Classic, кроме как путем постоянного сканирования.
сценарий автомобильного радио, который вы упомянули, однако, работает с некоторыми автомобильными радиоприемниками-мой автоматически устанавливает соединение Bluetooth с моим телефоном, как только я включаю радио. Я наблюдал подобное поведение с Bluetooth-клавиатуры.
Я могу только предположить, что эти периферийные устройства периодически пытаются подключиться к сопряженным устройствам, пока это успешно. Это имеет смысл для периферии в определенных условиях:
- слив батареи не является проблемой. (Радио работает от автомобильного аккумулятора, и большую часть времени он включен, двигатель работает и аккумулятор заряжается.)
- периферийное устройство разговаривает только с одним телефоном за раз и, таким образом, может приостанавливать сканирование, пока оно подключено к одному. (Это конкретное радио может обрабатывать только один телефон за раз.)
- периферия в основном бесполезна, когда нет подключен к другому устройству, и поэтому можно ожидать, что он будет подключен к чему-то большую часть времени. (Это касается гарнитур, клавиатур, мышей и тому подобного.)
очевидно, что зависит от вашей способности влиять на поведение сопряженного устройства. Если это готовое устройство, оно либо работает, либо нет, но если вы разрабатываете пользовательское периферийное устройство, это стоит рассмотреть.