Android无法在配对后自动重新连接

Android无法在配对后自动重新连接,android,bluetooth,bluetooth-lowenergy,stm32,android-bluetooth,Android,Bluetooth,Bluetooth Lowenergy,Stm32,Android Bluetooth,我们希望Android自动连接到我们定制的可编程外围设备 我们的外设应该定期(但不经常)发布广告,并尝试向手机显示一些对时间敏感的传感器数据。因此,我们希望手机随时可以连接 通常,您可以将智能手表与安卓系统配对,安卓系统将在智能手表处于范围内时自动连接到智能手表。所以我们相信我们的用例应该是可行的 我读了很多答案,建议在连接时将“autoconnect”参数设置为true。我已经尝试过了,重新启动后,甚至在Android上禁用和重新启用蓝牙后,重新连接都不会持续。说我应该在后台扫描,但安卓做了这

我们希望Android自动连接到我们定制的可编程外围设备

我们的外设应该定期(但不经常)发布广告,并尝试向手机显示一些对时间敏感的传感器数据。因此,我们希望手机随时可以连接

通常,您可以将智能手表与安卓系统配对,安卓系统将在智能手表处于范围内时自动连接到智能手表。所以我们相信我们的用例应该是可行的

我读了很多答案,建议在连接时将“autoconnect”参数设置为true。我已经尝试过了,重新启动后,甚至在Android上禁用和重新启用蓝牙后,重新连接都不会持续。说我应该在后台扫描,但安卓做了这个。如果我使用前台服务,我的用户会讨厌这个应用。如果我使用后台服务,我可能会错过外围设备在连接过程中的尝试,代码很容易出错

理想情况下,我想做一些像他在信中所说的事情。请阅读后续问题和回答

但是,我们无法通过Android的蓝牙设置查看我们的应用程序。我们只能连接到外围设备,并使用我们的应用程序(或nrf connect)与其配对。在绝望中,我试图修改外围设备的广告标志。然后我可以在Android的蓝牙设置中看到它。但当我尝试使用Android的设置配对时,尝试失败,因为外围设备未处于“配对模式”


我们正在构建应用程序和外围设备,因此我们可以同时更改它们。我想知道我们的用例是否可行,以及我们需要做什么才能让它工作。我们将STM32WB用于外围设备。

最好的方法是确保您的外围设备可以连接。一旦您与它绑定,您就可以始终使用自动连接,因为Android存储有关绑定设备的信息,您不再需要扫描它。因此,您可以避免在后台扫描的问题


虽然这解决了扫描的需要,但你仍然需要处理应用程序在后台被杀死的问题。据我所知,使用前台服务仍然是最好的解决方案。我不认为你的用户会因此而讨厌你的应用…

使用以下技术的组合:

  • 把设备绑起来。这可能是因为糟糕的Android Bluetooth LE API设计在连接到设备时没有将“地址类型”作为额外参数而需要的。当您使用蓝牙设备地址连接时,它会在绑定信息中查找具有此地址的设备,并使用相应的地址类型(随机或公共)

  • 使用
    connectGatt
    ,并将
    autoConnect
    设置为true。这意味着没有超时,以及在连接断开时自动重新连接。即使外围设备开始做广告需要几天或几周的时间,它仍然可以工作

  • 重新启动蓝牙时,请收听并重新启动连接

  • 在应用程序的进程中使用前台服务,以防止操作系统终止进程。用户现在可以在Android设置中隐藏恼人的通知,如果他们愿意的话

  • 启动后,请收听以启动应用程序,包括前台服务

  • 收听以在应用程序更新后自动重新启动应用程序。有关说明,请参阅


  • 你的意思是,在建立了一种关系之后,我可以在Android引导下启动我的应用程序,并尝试使用等于true的自动连接连接gatt.connect?这将允许我的应用程序在外设广告发布后立即连接到外设。但是会不会有一个暂停?如果这样做有效,它将有望解决扫描问题。如果前台服务仅在外围设备连接时启动,则应该可以。但只要Android能够尝试连接,我就必须显示前台服务。事实上,当发出自动连接时,不会有超时,你可以在应用启动后直接执行。有时,一些手机的连接时间有点长,但你可以通过将广告间隔保持在1000毫秒以下来解决这个问题。试试看,我正在做这个。这似乎很有希望。但是,如果没有我们的应用程序的干预,设备真的不可能自动连接到设备上吗?Android永远不会自己连接到设备上。它必须是一个需要连接的应用程序,或者是一个通过系统设置绑定的标准配置文件设备,如HID。我刚刚完成了你的建议。它起作用了。非常感谢。展望未来,为外围设备实现一个标准配置文件(如HID)似乎更接近我们的要求。你能告诉我更多关于安卓期望/需要通过系统设置连接到设备的信息吗?系统设置如何决定它可以连接到什么和不能连接到什么?例如,Bluetooth SIG定义的心率模式会通过Android系统设置连接吗?为什么它会起作用?