Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android系统如何自动连接到配对设备?_Android_Bluetooth_Bluetooth Lowenergy - Fatal编程技术网

android系统如何自动连接到配对设备?

android系统如何自动连接到配对设备?,android,bluetooth,bluetooth-lowenergy,Android,Bluetooth,Bluetooth Lowenergy,我想知道的: 我想知道android系统(比如android智能手机)是如何自动连接到以前配对过的设备上的 例如,我在第一天的“打开扫描/广告->单击配对”过程中将蓝牙耳机与android智能手机配对。当我在耳机上打开广告时,它会在第2天、第3天、第4天自动连接,依此类推。关键是,我不必再次扫描我的智能手机来找到我的(配对)耳机 我无法理解android系统是如何发现配对设备已打开的。安卓系统是否在后台定期扫描?即使我没有点击“扫描”按钮 我为什么问: 在配对后,我想让我的应用程序自动连接到定制

我想知道的:

我想知道android系统(比如android智能手机)是如何自动连接到以前配对过的设备上的

例如,我在第一天的
“打开扫描/广告->单击配对”
过程中将蓝牙耳机与android智能手机配对。当我在耳机上打开广告时,它会在第2天、第3天、第4天自动连接,依此类推。关键是,我不必再次扫描我的智能手机来找到我的(配对)耳机

我无法理解android系统是如何发现配对设备已打开的。安卓系统是否在后台定期扫描?即使我没有点击“扫描”按钮

我为什么问:

在配对后,我想让我的应用程序自动连接到定制的设备。我成功地使用
createBond()
方法进行了配对(绑定),但之后,我找不到如何进行自动连接。我知道我可以像这样打开自动连接功能,
connectGatt(XXX,true,XXX)
,但当BLE设备断开连接几天时,自动连接功能不起作用

所以我想让我的应用程序像安卓系统和蓝牙耳机一样工作。但即使我挖掘AOSP代码,也无法找到android蓝牙系统的工作原理

我发现了很多关于我的问题的问题,但没有答案

提前谢谢

更新:


我发现当配对耳机打开时(启动广告),就会激活
bt\u btif
(使用LG智能手机和Nexus 5)。但是
bt\u btif
无法使用我的自定义BLE设备激活。。。我能做什么?

我做过一个类似的应用程序,我对此没有问题。作为解决问题的最后手段,我建议在一个简单的DB表中写入BLE设备地址并手动连接到它。我做过这样的东西
. 这不是最佳实践代码,但我希望您能找到解决方案的想法

我想我找到了解决办法

首先,我的问题的解决方案是:Android智能手机似乎可以从硬件方面检测附近蓝牙设备的状态变化。当配对的蓝牙耳机开始播发时,会调用HAL中的回调(我想)

因此,当活动开始时(在
MainActivity
onResume()
中),我使用MAC地址将我的应用程序连接到我想要的设备


如果我的BLE外围设备没有广告,连接将失败。但是设备在开始播发时会自动连接,因为
自动连接
参数被设置为true。

执行
connectGatt(XXX,true,XXX)
是正确的方法
gatt.connect()
还启动自动连接。一旦执行该操作,手机将扫描设备,并在设备出现时连接到设备。如果手机上的蓝牙功能已关闭,或者您的应用程序进程正在终止,则会中断此通话。为了避免进程被终止,让你的应用程序有一个前台服务


然而,有一个问题是,Android中存在一个bug,它有时会让auto connect执行直接连接(并在30秒左右后取消)。看见您需要使用反射来避免此错误。

我要做的是自动重新连接到BLE设备,而无需用户的任何输入。我认为您的应用程序通过单击设备连接到设备。如果我的理解有误,请让我知道。初始化是正确的,但你可以在其他事件上做类似的事情,例如当应用程序启动时,或当发现新设备时,检查其地址是否已在DB中。我根据从你的代码中获得的灵感找到了一个解决方案。非常感谢。以你的耳机为例是没有用的:经典蓝牙和BLE的扫描方式完全不同。谢谢你对自动连接错误的评论!,它引导我走上了一条我永远不会调查的调试路线。这个答案中有一个完整的java解决方案: