随着可穿戴的兴起,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后,实际会变成如下配置:

参数最大连接间隔最小连接间隔从机延迟超时时间
BALANCED50ms30ms020s
HIGH15ms11.25ms020s
LOW_POWER125ms100ms020s

比较坑的是,超时时间很长,一旦设置后,不能恢复。超时时间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用的,很少见了。


银翼Neal
18 声望3 粉丝