Android上的BLE(蓝牙低功耗蓝牙),创建并重新连接到并不总是存在的设备
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android上的BLE(蓝牙低功耗蓝牙),创建并重新连接到并不总是存在的设备相关的知识,希望对你有一定的参考价值。
好吧,我想通过BLE连接到OBD2加密狗,该加密狗会根据汽车状态打开/关闭。按照现在的计划,android设备本身将一直运行。
AFAIK我有两个重新连接的选项:
a)将connectGatt'autoconnect'参数设置为'true'
b)定期扫描设备,直到出现“我的” MAC,然后连接到该设备
我的问题:
'autoconnect'的可靠性如何?
- [[有没有更好的方法(例如,系统广播或每当有新的BLE devce出现时,此类方法就可以减少扫描并立即打开设备,或者至少开始扫描吗?
此外
哪个版本的Android足以完成此任务?我读过一开始BLE实施并不可靠;)
回答您的问题:
“自动连接”的可靠性如何?
自动连接是可靠的,如果您知道如何使用它。为了使其能够像程序员一样工作,需要付出相当大的努力。它适用于当今大多数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的博客(我建议阅读那些内容以获取编程详细信息!)>
扫描参数
以上是关于Android上的BLE(蓝牙低功耗蓝牙),创建并重新连接到并不总是存在的设备的主要内容,如果未能解决你的问题,请参考以下文章