繁体   English   中英

Android 的蓝牙`autoConnect` 参数究竟有什么作用?

[英]What exactly does Android's Bluetooth `autoConnect` parameter do?

请参阅BluetoothDevice.connectGatt() 的描述autoConnect

布尔值:是直接连接到远程设备(false)还是在远程设备可用时自动连接(true)。

这究竟是做什么的? 如果它是false我想它必须在短时间内扫描特定设备,如果找不到就放弃。 但如果它是true ,它有什么作用呢? 它会立即开始扫描吗? 它会永远扫描吗? 是否定期扫描? 如果它断开连接会自动重新连接吗? Google 什么时候开始编写像样的文档?

编辑:我已将参数跟踪到bt_gatt_client.h

/** Create a connection to a remote LE or dual-mode device */
bt_status_t (*connect)(int server_if, const bt_bdaddr_t *bd_addr,
                       bool is_direct, int transport);

搜索is_direct会出现一些有趣的结果。

这是一个稍长的解释,但它仍然没有回答任何问题。

autoConnect 参数确定是主动连接到远程设备,还是被动扫描并在远程设备在范围内/可用时完成连接。 通常,与设备的第一次连接应该是直接的(autoConnect 设置为 false),并且应该在将 autoConnect 参数设置为 true 的情况下调用与已知设备的后续连接。

我还发现了 Android 5 蓝牙 HCI 要求的这个定义,其中包含许多有用的细节,但仍然没有关于自动连接应该如何工作的真正答案。

有关堆栈溢出的更多详细信息: BLE 的 connectGatt 中 autoConnect 的哪个正确标志?

直接连接和自动连接之间存在一些未记录在案的差异:

直接连接是具有 30 秒超时的连接尝试。 当直接连接正在进行时,它将暂停所有当前的自动连接。 如果已经有一个直接连接挂起,则最后一个直接连接不会立即执行,而是排队并在前一个完成时开始。

使用自动连接,您可以同时拥有多个挂起的连接,它们永远不会超时(直到明确中止或蓝牙关闭)。

如果连接是通过自动连接建立的,当远程设备断开连接时,Android 将自动尝试重新连接到远程设备,直到您手动调用 disconnect() 或 close()。 一旦通过直接连接建立的连接断开,就不会尝试重新连接到远程设备。

与自动连接相比,直接连接具有不同的扫描间隔和扫描窗口,其占空比更高,这意味着它将投入更多的无线电时间来侦听远程设备的可连接广告,即连接建立得更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM