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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 1Making Android BLE work — part 2的博客(我建议阅读那些内容以获取编程详细信息!)>

  • 另一答案
    “自动连接”与扫描+“直接连接”之间有很多区别。理想情况下,我们需要“自动连接”,因为它只需要一个广告包来建立连接,而不是两个。

    扫描参数

    以上是关于Android上的BLE(蓝牙低功耗蓝牙),创建并重新连接到并不总是存在的设备的主要内容,如果未能解决你的问题,请参考以下文章

    Android 低功耗蓝牙 (BLE) 环回

    Android 低功耗蓝牙(Ble) 开发总结

    适用于Android的蓝牙低功耗(BLE)外设应用程序

    Android ble (蓝牙低功耗) 中的坑和技巧

    Android 低功耗Ble 蓝牙4.0多连接 开源框架

    Android低功耗蓝牙(蓝牙4.0)——BLE开发(上)