随着可穿戴的兴起,BLE设备越来越多了,智能手表,蓝牙耳机,都使用BLE。
MTU设置
一般由蓝牙主机(安卓)发起MTU请求,调用requestMtu。目前市面上的BLE设备支持范围为23-517,可以设置个较大值,实际设备方会返3支持的最大值。如设置300,协商后为设备支持的247。
MTU默认是23,当然也有少部分设备能够自己强制设置一个MTU,而不需要经过蓝牙主机设置。
连接参数(Connection Priority)
BLE的连接参数有连接间隔(Interval Max, Interval Min),从设备延迟(connLatency),超时时间(Supervision Timeout)等。安卓的BLE并不能单独设置这些参数,而是把他们归纳为3种配置:
BluetoothGatt.CONNECTION_PRIORITY_BALANCED = 0
BluetoothGatt.CONNECTION_PRIORITY_HIGH = 1
BluetoothGatt.CONNECTION_PRIORITY_LOW_POWER = 2
一旦调用requestConnectionPriority后,实际会变成如下配置:
参数 | 最大连接间隔 | 最小连接间隔 | 从机延迟 | 超时时间 |
---|---|---|---|---|
BALANCED | 50ms | 30ms | 0 | 20s |
HIGH | 15ms | 11.25ms | 0 | 20s |
LOW_POWER | 125ms | 100ms | 0 | 20s |
比较坑的是,超时时间很长,一旦设置后,不能恢复。超时时间20s,意味着实际断连了,却要在20s后才收到断连回调。所以调用requestConnectionPriority需谨慎。
BLE传输层模式(Transport)
连接BLE调用connectgatt时,有一个transport参数,如下:
BluetoothDevice.TRANSPORT_AUTO = 0
BluetoothDevice.TRANSPORT_BREDR = 1 //优先使用BR/EDR
BluetoothDevice.TRANSPORT_LE = 2 //优先使用LE
一般是默认0,但是当一些设备同时支持经典蓝牙和BLE,并且合并广播的时候,就需要设置了。BLE应用当然是设置TRANSPORT_LE,否则会出现连接不上的情况。目前在杰里芯片、恒玄BES芯片上遇到这种情况,这两种芯片在智能手表和蓝牙耳机中使用较多。这些设备BLE广播也会注明LE and BR/EDR Capable。TRANSPORT_BREDR应该是SPP用的,很少见了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。