如何解决我可以通过 BLE 通告长度超过 31 个字节的字符串吗?
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,这意味着数据太长了。
解决方法
这可以使用 extended Advertisements 来完成,这是 BLE 5.0 中添加的一项功能:
扩展广告:扩展广告是一种宣传比旧版广告允许的更多(卸载)数据的方式。卸载是通过首先在主通道上做广告来完成的,该主通道指向辅助通道上的辅助数据包。
注意:由于非蓝牙 5 设备将无法发现扩展广告,因此建议广告商也使用带有旧版广告 PDU 的广告集,以便较旧的扫描设备能够发现终端设备。广告集用于同时发送不同类型的广告事件。每个广告集都会有不同的广告参数,例如广告PDU类型、广告间隔和PHY。
Bluetooth Core specification(版本 5.2 | 第 6 卷,B 部分 | 4.6.12 LE 扩展广告)指定这会将可能的有效负载增加到 255 字节。
如上面引用所述:如果您需要支持使用 BLE 版本低于 5 的设备,这将不起作用,您必须减小广告负载的大小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。