目标:
我正在尝试让我的android服务自动连接到已经 在其范围内配对蓝牙设备。
示例:
我把我的iphone与我的车配对了。当我坐在我的汽车音乐中 开始自动播放。我不需要再连接它。一世 不需要开始一首歌。它只是启动itunes并开始播放 音乐。我想在我的Android应用程序中使用这种连接。
一个明显的解决方案是让后台服务中的线程运行,每隔X秒尝试连接一次。然而,由于电池寿命的影响,这并不是最佳选择。
我尝试设置广播接收器以便在ACTION_ACL_CONNECTED
上触发,但这似乎只在我连接到设备后被调用。
当手机进入设备范围时,我的应用程序无法收到通知吗?
过去两天我花了大部分时间试图让这个没有运气。关于如何连接到bt设备有十亿个教程,但是在范围内没有自动连接。开始质疑这是否可能..如果不是,我会被吹走:(
相关问题:
Find already paired bluetooth devices automatically, when they are in range
答案 0 :(得分:6)
据我所知,只要它在范围内,就无法自动连接到通用蓝牙设备。您最好的选择是进行查询循环,定期查询可用设备并连接到您所绑定的设备(尽管如您所说,这是相当耗电的)。
但是,如果您的设备(手机和外围设备)都支持蓝牙4.0(LE)和GATT,您可以使用connectGatt方法,一旦设备可用,它将自动连接(同样,虽然我迄今为止做的有限测试表明它并不重要,但对电池的影响还不太确定。
我并不完全确定当设备是非GATT时connectGatt
的行为是什么,但可能值得调查 - 我的猜测是你会收到状态为{的回调{ {3}}当设备进入范围但不支持GATT时(这至少可以指示何时连接)。
如果您在非LE /非GATT设备上找到解决方案或调查此方法的行为,请更新您的问题,因为我很想知道更多相关信息。
答案 1 :(得分:0)
如前所述,除了不断扫描之外,使用蓝牙经典技术并没有简单的方法。
然而,您提到的汽车收音机情况与某些汽车收音机配合使用 - 我打开收音机后会自动与我的电话建立蓝牙连接。我观察到蓝牙键盘的行为类似。
我只能推测这些外围设备会定期尝试连接到配对设备,直到它成功为止。这在某些条件下对外围设备有意义:
显然,这取决于您影响配对设备行为的能力。如果它是一个现成的设备,它既可以工作也可以不工作 - 但如果您正在设计定制外设,那么值得考虑。
答案 2 :(得分:0)
还有另一种情况-BT设备X与手机连接后,只要在范围内就连接到BT设备Y(并启动最新播放的应用程序)?
现实生活中的情况:在我的沃尔沃汽车中,我有一个内置的BT用于通话,还添加了用于音频的其他BT。我开车后,内部BT便会连接到电话。但是添加的没有。