簡體   English   中英

我可以通過 BLE 通告長度超過 31 個字節的字符串嗎?

[英]Can I advertise string that is longer than 31 bytes through BLE?

private fun advertise(tek:String){bluetoothManager.adapter.bluetoothLeAdvertiser
        val advertiser: BluetoothLeAdvertiser=BluetoothAdapter.getDefaultAdapter().bluetoothLeAdvertiser
        val settings = AdvertiseSettings.Builder().setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED).setConnectable(true).setTimeout(0).setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM).build()
        val uuid = UUID.randomUUID()
        val pUuid = ParcelUuid(UUID.fromString(uuid.toString())) 
        val data: AdvertiseData = AdvertiseData
            .Builder()
            .addServiceData(pUuid,tek.toByteArray()).build()


        val advertiseCallback = object: AdvertiseCallback(){
            override fun onStartSuccess(settingsInEffect: AdvertiseSettings){
                Log.d(TAG,"BLE Advertising start")
                super.onStartSuccess(settingsInEffect)
            }

            override fun onStartFailure(errorCode: Int){
                Log.d(TAG,"BLE Advertising onStartFailure: $errorCode")
                super.onStartFailure(errorCode)
            }
        }
        advertiser.startAdvertising(settings, data, advertiseCallback)
        finish()
    }

這是我為通過 BLE 做廣告而編寫的代碼。 這里的 tek 數據是一個長度超過 31 個字節的字符串(例如.QUNf4ScRXQ9mJDVI7k5T1THGr7l7Fvpquk4ASMySRn8=)。 有什么辦法可以通過 BLE 做廣告嗎? 當我嘗試在上面的代碼上做廣告時,它給出了 onStartFailure 代碼 :1,這意味着數據太長。

這可以使用擴展的 Advertisements來完成,這是 BLE 5.0 中添加的一項功能:

擴展廣告:擴展廣告是一種廣告比傳統廣告允許的更多(卸載)數據的方式。 卸載是通過首先在主信道上做廣告來完成的,該主信道指向輔助信道上的輔助數據包。

注意:由於非藍牙 5 設備將無法發現擴展廣告,因此建議廣告商也使用帶有舊式廣告 PDU 的廣告集,以便較舊的掃描設備能夠發現終端設備。 廣告集用於同時發送不同類型的廣告事件。 每個廣告集都會有不同的廣告參數,例如廣告 PDU 類型、廣告間隔和 PHY。

藍牙核心規范(版本 5.2 | 第 6 卷,B 部分 | 4.6.12 LE 擴展廣告)指定這會將可能的有效載荷增加到 255 字節。

如上面的引用所述:如果您需要支持使用低於 5 的 BLE 版本的設備,這將不起作用,您必須減小廣告負載的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM