AndroidBLE开发设置MTU
什么是MTU
MTU(MaximumTransmissionUnit),最⼤传输单元,是指⼀种通信协议的某⼀层上⾯所能通过的最⼤数据报⼤⼩(以字节为单位)。⽽在
AndroidBLE开发中,则指每包数据能携带的最⼤字节上限。
为什么要设置MTU
AndroidBLE传送数据时,MTU的默认值是23byte,除掉GATT协议往包头加上的3个字节,留给开发⼈员的就是20byte,也就是说正常情况
下,App通过BLE每包传输的数据最多只能是20byte。当某个功能需要传输⼤量的数据时,⽐如固件升级,我们的固件虽然只有⼏百KB⼤⼩,却
居然要分上万个包,传输需要⼗多分钟,显然效率太低。⽽通过设置MTU,最⾼可以将MTU调整到512Byte,从⽽⼤⼤提⾼数据传输的效率。
前提条件
动态设置MTU,需要传输的双⽅都⽀持才⾏,此外还有⼀些前提条件:
1.软件层⾯,AndroidAPI版本>=21(Android5.0),才⽀持设置MTU。
2.硬件层⾯,蓝⽛4.2及以上的模块,才⽀持设置MTU。
对于第⼀个限制,⽐较好适配,编码时只需要判断⼿机系统版本,API>=21才⾛动态设置MTU的逻辑即可。
对于第⼆个限制,稍微⿇烦,因为⽬前没有接⼝可以查询⼿机蓝⽛的版本,只能在请求设置MTU的回调⾥进⾏判断,如果设置失败,则仍然⾛默
认的逻辑,相当于仍然使⽤默认的20byte。
代码实例
privatevoidtMtu(inttMtu){
BluetoothManagerbluetoothManager=(BluetoothManager)getSystemService(OTH_SERVICE);
BluetoothAdapterbluetoothAdapter=pter();
eScan(Callback(){
@Override
publicvoidonLeScan(BluetoothDevicedevice,intrssi,byte[]scanRecord){
tGatt(,true,newBluetoothGattCallback(){
@Override
publicvoidonServicesDiscovered(BluetoothGattgatt,intstatus){
icesDiscovered(gatt,status);
if(_INT>=N_OP){
if(tMtu>23&&tMtu<512){
tMtu(tMtu);
}
}
}
@Override
publicvoidonMtuChanged(BluetoothGattgatt,intmtu,intstatus){
hanged(gatt,mtu,status);
mMtu=mtu;
if(_SUCCESS==status&&tMtu==mtu){
LogUtils.d("MTUchangesuccess="+mtu);
}el{
LogUtils.d("MTUchangefail!");
}
}
});
}
});
}
本文发布于:2023-03-16 07:48:11,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/d5690308668b287c04afe7af249da5c4.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:mtu设置.doc
本文 PDF 下载地址:mtu设置.pdf
留言与评论(共有 0 条评论) |