You*_*agy 3 android bluetooth stm32 bluetooth-lowenergy android-bluetooth
我们希望 Android 自动连接到我们定制的 BLE 外设。
我们的外设应定期(但不频繁)进行广告并尝试向手机指示一些时间敏感的传感器数据。因此我们希望手机随时可以连接。
通常,您可以将智能手表与 Android 配对,然后只要智能手表在范围内,Android 就会自动连接到智能手表。所以我们相信我们的用例应该是可行的。
我读了很多答案,建议在连接时将“autoconnect”参数设置为 true。我已经尝试过了,重新启动后,甚至在 Android 上禁用并重新启用蓝牙后,重新连接都不会持续。Brian 的回答说我应该在后台扫描,但 Android 使这变得不切实际。如果我使用前台服务,我的用户会讨厌该应用程序。如果我使用后台服务,我可能会在Android 打瞌睡期间错过外围设备的连接尝试,并且代码容易出错。
理想情况下,我想做一些像埃米尔在他的回答中所说的那样的事情。请阅读后续问题和答复。
但是,我们无法通过 Android 的蓝牙设置看到我们的应用程序。我们只能使用我们的应用程序(或 nrf Connect)连接到外围设备并与其配对。无奈之下,我尝试修改外设的广告标志。然后我就可以在 Android 的蓝牙设置中看到它。但是,当我尝试使用 Android 设置进行配对时,尝试失败,因为外围设备未处于“配对模式”。
我们正在构建应用程序和外围设备,因此我们可以更改两者。我想知道我们的用例是否可行以及我们需要做什么才能使其发挥作用。我们使用 STM32WB 作为我们的外设。
结合使用这些技术:
绑定设备。这可能是需要的,因为糟糕的 Android 蓝牙 LE API 设计在连接到设备时不将“地址类型”作为额外参数。当您使用蓝牙设备地址进行连接时,它会在绑定信息中查找具有该地址的设备,并使用相应的地址类型(随机或公共)。
connectGatt与autoConnect设置为 true一起使用。这意味着没有超时,并且在连接断开时自动重新连接。即使外围设备需要几天或几周的时间才能开始广告,它仍然可以工作。
收听https://developer.android.com/reference/android/bluetooth/BluetoothAdapter#ACTION_STATE_CHANGED并在蓝牙重新启动时重新启动连接。
在应用程序进程中使用前台服务可防止操作系统终止该进程。现在,如果用户愿意,可以在 Android 设置中隐藏烦人的通知。
监听https://developer.android.com/reference/android/content/Intent#ACTION_BOOT_COMPLETED以在启动后启动您的应用程序,包括您的前台服务。
收听https://developer.android.com/reference/android/content/Intent#ACTION_PACKAGE_REPLACED以在应用程序更新后自动重新启动您的应用程序。有关一些说明,请参阅/sf/answers/149411041/ 。
| 归档时间: |
|
| 查看次数: |
2584 次 |
| 最近记录: |