目标:
我正在尝试让我的 Android 服务自动连接到已经 当蓝牙设备在范围内时进行配对。
示例:
我的 iPhone 已与我的汽车配对。当我坐下来聆听汽车音乐时 自动开始播放。我不需要再次连接它。我 不需要开始播放歌曲。它只是启动 itunes 并开始播放 音乐。我希望在我的 Android 应用程序中实现这种连接。
一个明显的解决方案是在后台服务中运行一个线程,尝试每 X 秒连接一次。然而,由于电池寿命的损失,这并不是最佳选择。
我尝试设置广播接收器以在
ACTION_ACL_CONNECTED
上触发,但这似乎只有在我连接到设备后才会被调用。
当手机进入设备范围时我的应用程序无法收到通知吗?
过去两天我花了大部分时间试图让它工作,但没有运气。有十亿个关于如何连接到蓝牙设备的教程,但没有一个是在范围内自动连接的。开始质疑这是否可能......如果不是的话我会被震惊:(
相关问题:
据我所知,没有办法在通用蓝牙设备处于范围内时自动连接到该设备。最好的选择是建立一个查询循环,定期查询可用设备并连接到与您绑定的设备(尽管,正如您所说,这相当耗电)。
但是,如果您的设备(手机和外围设备)支持蓝牙 4.0 (LE) 以及 GATT,您可以使用 connectGatt 方法,该方法将在设备可用时立即自动连接(同样,不太确定电池影响,尽管我迄今为止所做的有限测试表明它并不重要)。
我不完全确定当设备非 GATT 时
connectGatt
的行为是什么,但可能值得研究 - 我的猜测是当设备进入时您会收到状态为 GATT_FAILURE
的回调范围但不支持 GATT(这至少会告诉您何时连接)。
如果您找到解决方案或调查此方法在非 LE / 非 GATT 设备上的行为,请更新您的问题,因为我很想了解更多信息。
如前所述,除了不断扫描之外,没有简单的方法可以使用经典蓝牙来做到这一点。
但是,您提到的汽车收音机场景适用于某些汽车收音机——我的汽车收音机一打开收音机就会自动与手机建立蓝牙连接。我在蓝牙键盘上观察到类似的行为。
我只能推测这些外围设备会定期尝试连接到配对设备,直到成功为止。在某些情况下,这对于外围设备来说是有意义的:
显然,这取决于您影响配对设备行为的能力。如果它是现成的设备,它要么能工作,要么不能——但如果您正在设计定制外围设备,那么就值得考虑。
另一种情况怎么样 - 一旦 BT 设备 X 连接到手机,在范围内时连接到 BT 设备 Y(并启动最新的播放应用程序)?
现实生活中的情况:在我的沃尔沃汽车中,我有一个内置的 BT 用于通话,并且我添加了额外的 BT 用于音频。我一启动汽车,内部蓝牙就会连接到手机。但添加的却没有。
Utidhhg mc hgxjvd hgshf hhf。丈夫 yfxjjc htsj。如果 hfihc 丑陋 budusuu6 I.Uxghs7n gjxiuwuv yvzjt v yruzhudyugjb