当处于范围内时,自动连接已配对的蓝牙设备。

14
目标:

我正在尝试使我的Android服务在范围内时自动连接到已配对的蓝牙设备。

示例:

我已将iPhone与车辆配对。当我坐在车里时,音乐会自动播放。我不需要重新连接它。我不需要开始播放歌曲。它只需启动iTunes并开始播放音乐。我希望我的Android应用程序也能拥有这种连通性。

一个明显的解决方案是在后台服务中运行线程,每隔X秒尝试连接。但是,由于对电池寿命的影响,这并不是最佳选择。

我尝试设置广播接收器以在 ACTION_ACL_CONNECTED 上触发,但这似乎只会在我连接到设备后才被调用。

我的应用程序是否没有办法在手机进入设备范围时获得通知?

我花了最近两天的大部分时间都在尝试使它工作,但没有成功。有数十亿的教程可以连接到蓝牙设备,但没有教程可以自动连接到已经在范围内的设备。开始怀疑这是否可能...如果不是的话,我会非常惊讶 :(

相关问题:

自动查找已经配对的蓝牙设备,当它们在范围内时


你找到解决方案了吗?我之前也遇到了同样的问题。 - Jame
3个回答

7
据我所知,目前没有自动连接到通用蓝牙设备的方法。您最好是设置一个查询循环,定期查询可用设备并连接已绑定的设备(尽管如您所说,这会消耗相当多的电池)。但是,如果您的设备(手机和外围设备)都支持蓝牙4.0(LE)以及GATT,则可以使用connectGatt方法,在设备变为可用时自动连接(虽然对电池的影响还不确定,但我进行的有限测试显示它并不显著)。关于connectGatt在非GATT设备上的行为,我不太确定,但值得探究——我猜测当设备进入范围但不支持GATT时,您将收到一个带有状态GATT_FAILURE的回调(这至少会告诉您何时连接)。
如果您找到了解决方案或者研究了这种方法在非LE / 非GATT设备上的行为,请更新您的问题,因为我很想了解更多相关信息。

谢谢Bart。我肯定会尝试使用GATT。你有没有一些见解,告诉我如何在这里实现方案3(https://dev59.com/VmMm5IYBdhLWcg3wKsrO)。如果我创建一个服务器套接字来检测我是否在范围内,以及一个普通的BT套接字来连接(甚至不确定我是否理解它)。 - Mahir
支持连接的BLE设备需要支持GATT,我相信这不应该是一个问题。 - Emil

2
如前所述,使用经典蓝牙没有简便的方法来实现除了不断扫描以外的功能。
然而,您提到的汽车收音机场景适用于某些汽车收音机 - 我的汽车收音机在我打开收音机时就自动与我的手机建立蓝牙连接。我也观察到蓝牙键盘有类似的行为。
我只能猜测这些外围设备会定期尝试连接到已配对的设备,直到成功为止。这对于某些条件下的外围设备是有意义的:
- 电池耗尽不是问题。(收音机使用汽车电池供电,并且大部分时间都是开着发动机的,电池会被充电)。 - 外围设备一次只与一个手机通信,因此可以在连接到一个设备时暂停扫描。(这款特殊的收音机一次只能处理一个手机)。 - 外围设备大多数时候没什么用,若没有连接另一个设备就会变得无用,因此可以预期它会被连接到其它设备上大部分时间内。(这适用于耳机、键盘、鼠标等设备)。
显然,这取决于您影响配对设备行为的能力。如果它是现成的设备,要么它能工作,要么就不能 - 但如果您正在设计定制外围设备,则值得考虑。

0
另一个情况怎么样——当BT设备X连接到手机时,如果在范围内,请连接到BT设备Y(并启动最新播放应用程序)?
现实生活中的情况是:我的沃尔沃汽车上有一个用于通话的内置BT,我还添加了一个用于音频的附加BT。当我启动汽车时,内部BT会立即连接到手机。但是附加的BT不会连接。

1
请问您能否在代码中增加更多细节或以技术方式解释一下? - Luan Kevin Ferreira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接