如何通过 BLE 100 字节做广告?
How can I advertise via BLE 100 bytes?
如何通过 BLE 100 字节做广告?
SDK >= 26
我能够通告 20 个字节,但是当我通告超过 20 个字节时,我得到一个异常。
我已经阅读了这些文章:
Android: Sending data >20 bytes by BLE
据我了解,提到的链接不是用于广告而是用于 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 大小以发送更大的数据块。
如何通过 BLE 100 字节做广告?
SDK >= 26
我能够通告 20 个字节,但是当我通告超过 20 个字节时,我得到一个异常。
我已经阅读了这些文章:
Android: Sending data >20 bytes by BLE
据我了解,提到的链接不是用于广告而是用于 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 大小以发送更大的数据块。