厌伴老儒烹瓠叶,强随举子踏槐花。这篇文章主要讲述Android上的BLE(蓝牙低功耗蓝牙),创建并重新连接到并不总是存在的设备相关的知识,希望能为你提供帮助。
好吧,我想通过BLE连接到OBD2加密狗,该加密狗会根据汽车状态打开/关闭。按照现在的计划,android设备本身将一直运行。
AFAIK我有两个重新连接的选项:
a)将connectGatt'autoconnect'参数设置为'true'
b)定期扫描设备,直到出现“我的” MAC,然后连接到该设备
我的问题:
- 'autoconnect'的可靠性如何?
- [[有没有更好的方法(例如,系统广播或每当有新的BLE devce出现时,此类方法就可以减少扫描并立即打开设备,或者至少开始扫描吗?
哪个版本的Android足以完成此任务?我读过一开始BLE实施并不可靠; )
答案此问题更适合Super User网络,因为这不是编程问题。回答您的问题:
“自动连接”的可靠性如何?自动连接是可靠的,如果您知道如何使用它。为了使其能够像程序员一样工作,需要付出相当大的努力。它适用于当今大多数Android。通常,您应该使用
Android 7及更高版本使其正常运行。有人可能会认为Android 6足够。我不这么认为。有一个已知的race condition with a workaround(来自Polidea伙计),但您永远不知道该补丁是否具有是否已应用(如果您自己未编程)。
Autoconnect仅适用于cached
或bonded设备!否则没有机会。现在通常可以使用。为什么人们会觉得辛苦甚至不起作用?如果要使用/编程,则需要克服一些障碍。
- Google的文档非常简单,经常缺少详细信息甚至关键信息
- 考虑到竞争,Android BLE的api是低级的
- 每个供应商都可以对BLE堆栈进行更改,这会导致不兼容。当某件东西在一部手机上运行时,并不意味着它将在另一台来自不同制造商的手机上自动运行。
- 代码中有很多错误。最糟糕的是4.5和6,其他情况更好,但仍然存在一些没有任何解决方法的错误。我们都喜欢神秘的bug133。建议使用Android 7或更高版本。
是否有更好的方法(例如,在存在新的BLE devce时进行系统广播等,以减少扫描并立即打开设备,或至少至少开始扫描?您有两个选择:
- 首先进行主动扫描,然后在自动连接设置为
false
的情况下进行连接。比自动连接更快。 - 自动连接设置为
true
-它花费的时间比1。长,因为Android使用低能耗设置进行扫描。自动连接所需的连接时间因供应商而异。基于使用的低能耗设置(和实现)
false
时,您可以同时发出一个连接。使用的材料:主要来自Martijn van Welie Making Android BLE work — part 1和Making Android BLE work — part 2的博客(我建议阅读那些内容以获取编程详细信息!)>
推荐阅读
- 如何保存安卓系统中摄像头点击的图片()
- 如何修复mapreduce中mapper的setup方法给出的字符串值的不规则行为()
- 无法增加Max Application Master资源
- (Zeppelin + Livy)SparkUI.appUIAddress(),一定是错的
- Winform Application UI在其他打开的应用程序之间切换时冻结
- Android Place自动填充片段(无法设置文字)
- 如何在Android上的Kotlin中从Long类型变量中提取日期和时间
- 如何在Dapper.Net中编写一对多查询()
- 错误(任务':app:transformDexWithInstantRunSlicesApkForDebug'的执行失败。无法读取zip文件)