使用Android BLE,我在读取字节数据时需要请求一个大的MTU,还是仅在写入时才需要?

使用Android BLE,我在读取字节数据时需要请求一个大的MTU,还是仅在写入时才需要?,android,bluetooth,bluetooth-lowenergy,Android,Bluetooth,Bluetooth Lowenergy,据我所知,在安卓系统中,用于向Characteristic写入数据的MTU约为23个字节(使用3个字节,因此您有大约20个字节的空闲空间),您可以请求更高的MTU(最多512个),以允许您向蓝牙设备写入/发送更大的数据包 但是,在从数据库读取数据时是否也需要这样做 阅读和通知更新 如果说,我有一个以123字节块发送数据的特性,但我最多只需要向它发送2个字节,我是否需要协商一个大型MTU?我可以建议您阅读蓝牙核心标准中的ATT和GATT章节。这些解释了协议 默认情况下,Android不会协商比默认

据我所知,在安卓系统中,用于向Characteristic写入数据的MTU约为23个字节(使用3个字节,因此您有大约20个字节的空闲空间),您可以请求更高的MTU(最多512个),以允许您向蓝牙设备写入/发送更大的数据包

但是,在从数据库读取数据时是否也需要这样做

阅读和通知更新


如果说,我有一个以123字节块发送数据的特性,但我最多只需要向它发送2个字节,我是否需要协商一个大型MTU?

我可以建议您阅读蓝牙核心标准中的ATT和GATT章节。这些解释了协议

默认情况下,Android不会协商比默认值(23字节)更大的MTU。不过,您可以通过调用
requestMtu
函数自己完成

Android在读取/写入值时,如果MTU不够大,自动在引擎盖下使用“写入长特征值”和“读取长特征值”,以传输整个值。然而,这些程序效率很低,因为它们需要多次往返。读取操作也不是原子操作


通知和指示没有任何具有多个往返的“长”变体,因此这些将被截断以适合MTU。

感谢您的回复。我会试着在某个时候把那些章节翻出来。我知道requestMtu调用可以请求更大的MTU(可能不起作用,但应该返回当前的MTU)-但是Android文档大量暗示这只需要写入特征。我不知道我是否需要做它只是为了阅读。Android文档从来都不是最好的。在我目前的测试中,我没有要求一个更大的MTU,我有一个以字节[124]块向我发送数据(读取)的特征,这一切似乎都很好,但我不知道这是否只是我测试的手机。这是否意味着“可能”手机会处理它,但我应该要求至少127 MTU(124+头)即使只是为了阅读,Android BLE文档也毫无用处,因为它几乎没有说任何有用的东西。我想我的回答已经涵盖了你的后续问题。基本上,如果您想要更好的性能,并且如果您有很大的通知,您应该增加MTU。