requestMtu
时间: 2023-08-25 13:05:46 浏览: 63
在Android的SDK中,从API 21(Android 5.1)开始,BluetoothGatt类新增了一个requestMtu()方法来调整MTU(最大传输单元)。然而,由于我们的App需要在SDK 18(即Android 4.4)上运行,因此我们需要编写一个兼容的方法。为了实现这一点,我们可以使用@TargetApi(Build.VERSION_CODES.LOLLIPOP)注解来指定该方法只在API 21及以上的设备上执行。\[1\]
然而,在实际测试中,我们发现当调用requestMtu()方法后,发送操作会失败,即没有成功发送。但是,当我们将setMtu()方法关闭后,发送操作就可以正常进行。因此,我们推断问题可能出现在Native层,即蓝牙的驱动层,并且驱动可能没有感知到MTU的变化,这可能是驱动的一个bug。\[2\]
另外,我们还遇到了一个智能手表产品,它采用了DA14580的蓝牙芯片,并将MTU设置为72。在iOS下,该产品可以正常进行收发操作,其中包括长达38字节的OTA升级包。然而,在Android下,短包的收发操作正常,但是超过23个字节长度的包没有回应,只有小于等于22字节的包才能正常收发。通过与固件组的联调,我们发现Android可能没有发送这么长的包,这时我们怀疑是BLE的MTU问题。\[3\]
综上所述,对于requestMtu()方法的问题,可能是由于蓝牙驱动层的bug导致的。在Android下,MTU的调整可能会受到限制,导致发送操作失败或无法发送超过一定长度的包。
#### 引用[.reference_title]
- *1* *2* *3* [Android BLE MTU调整](https://blog.csdn.net/weixin_33519829/article/details/117602638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v4^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)