目录
mtu是什么?
mtu是指在一个协议数据单元中(protocol data unit, pdu
) 有效的最大传输byte
。
mtu默认是23byte
,但是供我们使用的只有20byte
。所以有时候不能满足我们的需求,需要我们手动设置mtu的大小。core spec
中att
的默认mtu
为23个byte
,att
的opcode
占1
个byte
、att
的handle
占2
个byte
、gatt
占20
个byte
。
23byte(att)=1byte(opcode) 2byte(handler) 20byte(batt)。
ble版本不同mtu不同
不同的蓝牙版本最大mtu不同,例如:蓝牙4.2的最大mtu=247byte(不一定正确,也有说是257byte、也有说是241byte),蓝牙5.0的最大mtu=512byte,有效的最大mtu还需要减去协议byte、opcode和handler。
蓝牙4.2:1byte(opcode) 2byte(handler) 244byte(batt)=247byte(不一定正确)
蓝牙5.0:512byte不一定正确)
自定义mtu
added in api level 21
在android
中修改mtu很简单只需要调用bluetoothgatt#requestmtu(int mtu)
方法即可。requestmtu(intmtu)
必须在发现蓝牙服务并建立蓝牙服务连接之后才能调用,否则mtu
会默认为20byte
。如果调用成功会自定回调bluetoothgattcallback
类中的onmtuchanged(bluetoothgatt gatt, int mtu, int status)
方法。
注意:我看到一些文档提到在public void onservicesdiscovered(bluetoothgatt gatt, int status) { }
方法中设置mtu
,但是亲自尝试之后不起作用。所以在连接成功之后立即设置mtu
,成功之后再去搜索服务。
以上就是android ble设置mtu大小实现详解的详细内容,更多关于android ble设置mtu的资料请关注其它相关文章!