在范围内时自动连接到配对的蓝牙设备
Posted
技术标签:
【中文标题】在范围内时自动连接到配对的蓝牙设备【英文标题】:Automatically connect to paired bluetooth device when in range 【发布时间】:2014-10-26 02:09:55 【问题描述】:目标:
我正在尝试让我的 android 服务自动连接到一个已经 蓝牙设备在范围内时已配对。
示例:
我的 iPhone 已与我的汽车配对。当我坐在我的车里音乐 开始自动播放。我不需要再次连接它。一世 不需要开始一首歌。它只是启动iTunes并开始播放 音乐。我希望在我的 Android 应用程序中实现这种连接。
一个明显的解决方案是让一个线程在后台服务中运行,每 X 秒尝试连接一次。但是,由于会影响电池寿命,这并不是最佳选择。
我尝试设置广播接收器以在 ACTION_ACL_CONNECTED
上触发,但这似乎只有在我连接到设备后才会被调用。
当手机进入设备范围时,我的应用是否无法收到通知?
在过去两天的大部分时间里,我一直在尝试让它工作,但没有运气。有十亿个关于如何连接到 bt 设备的教程,但没有一个教程可以在范围内自动连接。开始质疑这是否可能。如果不是,我会被吹走的:(
相关问题:
Find already paired bluetooth devices automatically, when they are in range
【问题讨论】:
您找到解决方案了吗?我遇到了同样的问题。 【参考方案1】:据我所知,没有办法在通用蓝牙设备进入范围后立即自动连接。您最好的选择是有一个查询循环,定期查询可用设备并连接到您绑定的设备(尽管,正如您所说,这是相当耗电的)。
但是,如果您的设备(手机和外围设备)支持蓝牙 4.0 (LE) 以及 GATT,您可以使用connectGatt 方法,该方法将在设备可用时自动连接(同样,不要太确定电池的影响,尽管到目前为止我所做的有限测试表明它并不重要)。
我不完全确定connectGatt
的行为在设备不是 GATT 时是什么,但它可能值得调查 - 我的猜测是当设备进入时您会收到状态为 GATT_FAILURE
的回调范围但不支持 GATT(这至少可以告诉您何时连接)。
如果您找到解决方案或调查此方法在非 LE/非 GATT 设备上的行为,请更新您的问题,因为我很想了解更多信息。
【讨论】:
谢谢巴特。我一定会试试关贸总协定。如果您有机会了解如何在此处实施方案 3 (***.com/questions/17810582/…)。如果我创建一个服务器套接字来检测我何时在范围内,并创建一个常规的 BT 套接字来连接(甚至不确定我是否理解) 支持连接的 BLE 设备需要支持 GATT 我相信,所以这应该不是问题。【参考方案2】:如前所述,使用蓝牙经典没有简单的方法可以做到这一点,除了不断扫描。
不过,您提到的车载收音机方案适用于某些车载收音机——我的收音机一打开就会自动与我的手机建立蓝牙连接。我在蓝牙键盘上观察到了类似的行为。
我只能推测这些外围设备会定期尝试连接到配对设备,直到成功。在某些情况下,这对于外围设备是有意义的:
不用担心耗尽电池。 (收音机靠汽车电池供电,而且大部分时间它处于开启状态,发动机正在运转,电池正在充电。) 外围设备一次只与一部手机通话,因此可以在连接到一部手机时暂停其扫描。 (这种特殊的收音机一次只能处理一部电话。) 外围设备在未连接到其他设备时几乎无用,因此可以预期在其通电的大部分时间都连接到某物。 (这适用于耳机、键盘、鼠标等。)显然,这取决于您影响配对设备行为的能力。如果它是现成的设备,它要么工作要么不工作——但如果你正在设计一个自定义外围设备,那么值得考虑。
【讨论】:
【参考方案3】:那么另一种情况呢 - 一旦 BT 设备 X 与手机连接,在范围内连接到 BT 设备 Y(并启动最新的播放应用程序)?
现实生活中的情况:在我的沃尔沃汽车中,我有一个用于通话的内置 BT,并且我为音频添加了额外的 BT。我一启动汽车,内部 BT 就会连接到手机。但是添加的没有。
【讨论】:
您能否添加更多关于如何使用代码执行此操作的详细信息或以技术方式解释?以上是关于在范围内时自动连接到配对的蓝牙设备的主要内容,如果未能解决你的问题,请参考以下文章