Android的蓝牙 `autoConnect` 参数究竟是做什么用的?

5
请参考BluetoothDevice.connectGatt()。关于autoConnect的描述如下:
布尔类型:是否直接连接到远程设备(false),还是在远程设备可用时自动连接(true)。
这个参数具体做什么呢?如果是false,我想它必须扫描特定设备并在短时间内放弃,如果没有找到。但如果是true呢?它会立即开始扫描吗?它会一直扫描吗?它会定期扫描吗?如果断开连接,它会自动重新连接吗?什么时候谷歌开始编写像样的文档呢?
编辑:我已经跟踪了这个参数到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要求的定义,其中包含许多有用的细节,但仍然没有真正回答autoconnect应该如何工作的问题。


https://code.google.com/p/android/issues/detail?id=195336 - Vincent Scheib
1个回答

6

在Stack Overflow上有更详细的内容: Which correct flag of autoConnect in connectGatt of BLE?

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

直接连接是一次连接尝试,超时时间为30秒。在直接连接进行时,它将暂停所有当前的自动连接。如果已经有一个直接连接待处理,则最后一个直接连接不会立即执行,而是排队等待前面的连接完成。

使用自动连接,您可以同时拥有多个等待连接,并且它们永远不会超时(除非明确中止或关闭蓝牙)。

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

直接连接具有不同的扫描间隔和扫描窗口,具有更高的占空比,这意味着它将花费更多的无线电时间来监听远程设备的可连接广告,即连接将更快地建立。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接