BLE 通告数据大小限制

gio*_*ozh 3 kotlin bluetooth-lowenergy android-bluetooth android-ble

在我的 Addroid 应用程序上,当我尝试启动 ble 广告时,我尝试添加一些额外的数据,正如我所读到的,广告数据必须 <= 31 字节。

我就是这样做的:

var testData = "abcdefghij"
var data = AdvertiseData.Builder().apply {
               addServiceData(
                   ParcelUuid(MY_UUID),
                   testData.toByteArray(Charsets.UTF_8)
               )
           }
bleAdvertiser.startAdvertising(
    settings.build(),
    data.build(),
    advertiseCallback
)
Run Code Online (Sandbox Code Playgroud)

这样一切都运转良好。现在如果testData字段变成

var testData = "abcdefghijk"
Run Code Online (Sandbox Code Playgroud)

由于超出广告数据大小限制,广告开始失败。

如果单个字符占用 2 个字节,为什么我有 11 个字符的字符串却超出了 30 个字节的限制?

Emi*_*mil 5

首先自动添加三个标志字节。

服务数据包包含第一个字节,说明它有多长,后面跟着一个字节包标识符,说明这里有一个服务数据包。然后,您将获得服务 uuid 的有效负载(16 字节),后跟 10 字节的 UTF-8 编码字符串。

总共有 31 个字节。如果添加“k”,则会得到 32 个字节,因此数据会变得太长。