Android上的BLE(蓝牙低功耗蓝牙),创建并重新连接到并不总是存在的设备

厌伴老儒烹瓠叶,强随举子踏槐花。这篇文章主要讲述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时进行系统广播等,以减少扫描并立即打开设备,或至少至少开始扫描?
    您有两个选择:

    1. 首先进行主动扫描,然后在自动连接设置为false的情况下进行连接。比自动连接更快。

    2. 自动连接设置为true-它花费的时间比1。长,因为Android使用低能耗设置进行扫描。自动连接所需的连接时间因供应商而异。基于使用的低能耗设置(和实现)
    自动连接的一大优点是它可以一次发出许多连接。当自动连接为false时,您可以同时发出一个连接。使用的材料:主要来自Martijn van Welie Making Android BLE work — part 1和Making Android BLE work — part 2的博客(我建议阅读那些内容以获取编程详细信息!)>
  • 另一答案“自动连接”与扫描+“直接连接”之间有很多区别。理想情况下,我们需要“自动连接”,因为它只需要一个广告包来建立连接,而不是两个。【Android上的BLE(蓝牙低功耗蓝牙),创建并重新连接到并不总是存在的设备】扫描参数

      推荐阅读