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

时间:2019-02-05 11:21:47

标签: android bluetooth-lowenergy android-bluetooth android-ble

如何通过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()
    }

1 个答案:

答案 0 :(得分:0)

你不能。

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

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

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

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

当然,您可以在运行时更改广告数据,并在每个广告中传输新数据。扫描设备将丢失大多数广告,因此您可以定期执行重传等操作。。。但这不是广告的目的。

  

据我所知,提到的链接不是广告解决方案,而是P2P连接,对吗?

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