如何为 Android 应用强制执行最低蓝牙 MTU?

Posted

技术标签:

【中文标题】如何为 Android 应用强制执行最低蓝牙 MTU?【英文标题】:How can I enforce a minimum Bluetooth MTU for an Android app? 【发布时间】:2017-06-04 21:13:54 【问题描述】:

我正在使用一个硬件,它通过特定的 BLE 特性发送和接收数据包。目前,每个数据包都必须是单独的读取或写入。

ios 与设备通信时,MTU 协商最多 157 个字节,很容易观察到这个限制。也很容易确认此 MTU 协商将适用于应用程序需要支持的所有 Apple 设备。如果没有 MTU 协商,我们将被限制为默认的 23 字节 ATT MTU,这意味着我们只能发送和接收 20 字节数据包(由于 GATT 开销)。用于某些功能的数据格式不适合 20 字节的数据包。

在不久的将来,我们会将应用移植到 android 并最终发布以供公众使用。我知道 Android API 提供了requestMtu() 方法来尝试 MTU 协商,但是如果用户的 Android 设备不支持高于默认 23 字节的 ATT MTU,我们希望能够尽快告诉用户该应用程序可能无法执行某些功能。理想情况下,我们希望阻止用户在此类设备上安装应用。

有没有一种方法可以检测(直接或间接)Android 设备的 BLE MTU 功能,而无需首先要求用户连接到 BLE 外围设备?

(注意:我遇到过一些轶事声称各种 Android 设备仅支持 23 字节默认值,但这些似乎大多来自不了解 MTU 协商的开发人员。可能所有现存的 Android 设备都支持更高的 MTU。我不知道这是不是真的。)

【问题讨论】:

【参考方案1】:

您能否举一个不支持高于默认 MTU 的 Android 设备的示例?

我听说所有 Android 设备都应该支持比默认值更高的 MTU。唯一的问题是 4.3 和 4.4 没有 requestMtu API,但是您可以简单地从外围设备启动 MTU 更改。

【讨论】:

我不知道存在任何此类设备。我没有关于那里有什么的可靠数据。我将编辑问题以反映这一点。

以上是关于如何为 Android 应用强制执行最低蓝牙 MTU?的主要内容,如果未能解决你的问题,请参考以下文章

在Android 6中打开wifi时如何为任何应用程序强制使用移动数据

如何为某些应用程序配置 MFA(在 Azure B2C 中)每天强制执行一次(而不是每次登录时)?

如何为我的应用正确设置最低 iOS 版本? [关闭]

如何为 iOS 项目设置最低代码覆盖率阈值?

Symfony2:如何为整个应用程序强制使用 HTTPS?

如何为 iTunes 连接提供强制更新?