Android的蓝牙`autoConnect`参数到底有什么作用?

时间:2016-06-22 10:29:10

标签: android bluetooth

BluetoothDevice.connectGatt()autoConnect的说明是

  

布尔值:是否直接连接到远程设备(false)或   一旦远程设备变为自动连接   可用(真实)。

这到底是做什么的?如果是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);

search for is_direct会产生一些有趣的结果。

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

  

autoConnect参数确定是否主动连接   远程设备,或者更确切地说是被动扫描和完成连接   当远程设备在范围/可用时。一般来说,第一次   与设备的连接应该是直接的(autoConnect设置为false)和   应使用以下方法调用与已知设备的后续连接   autoConnect参数设置为true。

我还发现这个definition of the Android 5 Bluetooth HCI requirements包含许多有用的细节,但仍然没有关于autoconnect应该如何工作的真实答案。

1 个答案:

答案 0 :(得分:0)

有关堆栈溢出的更多详细信息: Which correct flag of autoConnect in connectGatt of BLE?

  

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

     

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

     

使用自动连接,您可以在此处拥有多个待处理的连接   同一时间他们永远不会超时(直到明确中止或   直到蓝牙关闭。)

     

如果通过自动连接建立连接,Android   它会自动尝试重新连接到远程设备   断开连接,直到您手动调用disconnect()或close()。一旦   通过直接连接断开建立的连接,没有尝试   用于重新连接到远程设备。

     

直接连接在a处具有不同的扫描间隔和扫描窗口   比自动连接更高的职责,这意味着它将投入更多的无线电   是时候听远程设备的可连接广告了   即连接将更快建立。