Q值。 管理蓝牙连接的最佳做法是什么?
我已经阅读了android蓝牙指南&许多蓝牙连接教程。对封装设计和最佳实践没有帮助。
我之前从未使用外部设备编码连接。我用了两个星期的时间来绕过扫描附近蓝牙设备的代码并将它们扔进ListView。听众,广播和适配器!
我的项目将在蓝牙收据打印机上每15分钟打印1-40张收据。目前,安全性不是问题。在同一连接上,它也将接收数据(同时发送和接收似乎不是必要的,但是会有用)。我还不确定如何在这个单个加密狗设备上配置设备,但我猜这些设备是通过USB控制器连接到加密狗的。
到目前为止,我有1个对象来管理单个I / O连接。静态地我打开一个活动来选择一个连接(稍后在数据库中保存标签, mac 和 pin )。根据教程,我有“打开”,“收听”,“发送”和“关闭”方法。 让我感到困惑的是“如何”使用这些功能。我可以整天打开连接(10小时)并每隔3分钟使用一次吗?我应该在发送或请求数据时打开/关闭连接吗?我在哪里可以检测到需要重新连接?
答案 0 :(得分:5)
对不起简短的回答,但是从我使用蓝牙API的练习中,我发现这个视频描述的东西非常好(完全是个人意见......)
此外,如果您没有任何以前的经验,这将非常有用
最后在stackoverflow中查看了这个问题,它有很多很好的参考和例子!!
再次为这次短缺感到抱歉,但我相信,如果你检查这些,至少你的大多数问题和疑虑都会得到解答!
:)
修改强>
所以,让我更具描述性并分享我的一些经验。
我编写了一个与具有3个功能的BLE设备通信的应用程序
双面事件驱动按钮(按下手机上的按钮 - >事件被触发到设备;按下BLE设备上的按钮 - >事件被触发到手机)
从手机发送请求 - > BLE设备以当前电池百分比回答
持续读取手机与BLE设备之间的强度信号(为aprox。距离)
到目前为止一切顺利,现在事情的基本方法是:
搜索BLE设备(蓝牙搜索或附近蓝牙设备的“发现”)
选择您要连接的设备
在两个设备相互连接后,您可以启动Gatt通信。使用状态机的方法对我来说有点太过分了。但无论如何,通信是通过字节完成的(在我的情况下......)
在其中一个视频/资源中,至少对我来说有一些特定且非常有用的东西!说实话,我并不完全记得它,但想法是在任何通信之前,建议您阅读/获取BLE设备或类似设备的所有选项......
很棒的事情是了解您的设备“通信代码”,或者至少我称之为通信代码。
我真的希望这在某种程度上有所帮助!
请注意 这完全取决于我的经验,可能存在一些不匹配或错误的术语,但这就是我个人看到的东西,因为我的项目很久以前,我不记得大部分内容。
答案 1 :(得分:3)
这只是上面提供的STUCI提供的链接的总结。他已经更新了他的答案,我没有更新/编辑了这个总结。我的夏季主题不是解释性的,而是提供参考和帮助产生具体问题。
谢谢Stuci!其中一些是有帮助的: - 有些不是。我认为最好收集我的想法,看看已经解释了什么,如果还有什么没有。
(我不能在评论中发布这么多内容,抱歉)
请打电话给我任何不正确的事情。
(涵盖一堆随意的东西)
虽然我“不喜欢”代码视频: - 我看了它,因为它被推荐......我很高兴我做到了。虽然不是很有帮助但它确实引入了一些我不知道的概念。由于我的目标是旧的Android设备(v8 +),因此LE功能无关紧要。
蓝牙连接确实可以保持开放状态;从成功调用“startActivityForResult(...)方法的那一点开始。 两个基本因素会影响是否要保持开放连接:
单个连接确实可以“同时”输入&输出流。我
既然有人建议,我重新阅读了Android的蓝牙指南,在“管理连接”(谈论单个插座)下我注意到了这一点......
...但继续注意到阅读&互相写块。我仍需要进一步研究的东西。看起来你不能同时在同一个插槽上进行I / O ???
我还查看了Stuci添加的最大连接问题,并且在Android端没有找到任何文档。它可能存在,我找不到它。但是,大多数人似乎都同意,无论您编写什么硬件,都存在限制(可能低至4)。 一些值得注意的链接: - How many devices we can pair via Bluetooth of BLE to Android? - How many maximum device can we pair via Bluetooth to android device at a time? - https://groups.google.com/forum/#!topic/android-developers/adeBD275u30