gpt4 book ai didi

android - 如何通过 BLE 100 字节做广告?

转载 作者:行者123 更新时间:2023-11-29 02:22:27 25 4
gpt4 key购买 nike

如何通过 BLE 100 字节进行广告?
SDK >= 26
我能够通告 20 个字节,但是当我通告超过 20 个字节时,我得到一个异常。

我已经阅读了这些文章:
Android: Sending data >20 bytes by BLE
How to send more than 20 bytes data over ble in android?

据我了解,上述链接不是用于广告而是用于 P2P 连接的解决方案,对吗?

我的代码:

     private fun startAdvertising() {
goForeground()

Log.d(tag, "Service: Starting Advertising")

if (mAdvertiseCallback == null) {
val settings = buildAdvertiseSettings()
mAdvertiseCallback = SampleAdvertiseCallback()

if (mBluetoothLeAdvertiser != null) {
mBluetoothLeAdvertiser!!.startAdvertising(settings, data, mAdvertiseCallback)
}
}
}

private fun buildAdvertiseData(): AdvertiseData {
val advertisingData = AdvertiseData.Builder()
val uuid = BeaconWiliot.manufactureUuid
advertisingData.addServiceUuid(uuid)
advertisingData.setIncludeDeviceName(false)
advertisingData.addServiceData(uuid, ByteArray(20))
return advertisingData.build()
}

最佳答案

你不能。

广告数据包的最大长度为 31 字节。此外,您可以实现扫描响应。
BLE 数据包的 MTU 大小是在连接建立后协商的,与广告大小无关。

这个扫描响应就像广告数据的扩展:
您的设备广播广告。如果扫描设备感兴趣,它可以请求扫描响应。扫描响应可以包含或多或少与广告相同的数据,也可以有 31 个字节。
通常,将数据放入扫描响应会稍慢一些,因为必须发出新请求。从用户的角度来看,这几乎没有什么区别。

总共有 62 个字节。通常这 62 个字节包含数据,例如名称和一些标志,如“BLE_FLAGS_GENERAL_DISCOVERABLE_MODE”(名称取决于实现)以及一些用于标记数据类型和长度的开销。

(顺便说一句:我不知道为什么 31 和通常的数据包 20 字节有效负载...)

当然,您可以在运行时更改广告数据并在每个广告中传输新数据。扫描设备会漏掉大部分广告,因此你可以实现定期重传等等......但这不是广告的目的。

As I right understand, the mentioned links are no solution for advertising but for P2P connections, am I right?

是的。在 P2P 连接中,您可以将数据分段为多个数据包,或者更好地增加 MTU 大小以发送更大的数据 block 。

关于android - 如何通过 BLE 100 字节做广告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54533295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com