前几天和同事讨论了当前基于蓝牙BLE的时间剖面功能,发现很多Android源码问题。在本文中,我们来看看Android源代码中涉及BLE广播的坑,以帮助蓝牙开发者少走弯路。
在安卓系统中,一个汉字将通过UTF-8转换成三个字节的数据,因此名为“老母猪”的蓝牙将在UTF-8转换后获得15个字节的数据。
这样就会产生一个问题:当在BluetoothLeAdvertiser中检测到符合要求的广播数据时,最后转换成byte[]-型数组后,数据长度可能会超过31个字节,所以发送广播数据时可能会丢失应用程序设置的一些初始数据。
2.广播数据
根据蓝牙协议,传统BLE广播的数据长度最多为31字节,但有时扫描广播时发现广播数据有误,无缘无故多了数据。此时问题可能出在非原生蓝牙协议栈bluedroid上。有些蓝牙协议栈提供商会私加一些数据,导致广播数据更多,或者丢失一些应用设置的初始数据。如下图所示,使用非本机协议栈后发送的广播数据添加AD Type = 0x12的数据:
因此,在使用第三方提供的蓝牙协议栈时,需要更多地了解它们的实现是否与原协议栈不同,以免无故添加一些不必要的数据,从而丢失原有的设置数据。
3、广播参数Interval广播参数interval是一个范围值,interval_min ~ interval_max,等于50,即interval_max = interval_min+50,但在传统广播的HCI定义中,Interval的取值范围是0x0020 ~ 0x4000
参数接口的选择在于选择哪个接口来设置广播参数:
启用传统广播可以从上表中得出以下结论:
startAdvertising,则interval只有三种选择,但都在HCI规定的范围内startAdvertisingSet,则interval是一个范围值,大大增加了用户的可选项,但可能会超出传统广播定义的interval最大值0x4000。这一点应用使能传统广播时需重点关注。学习源代码永无止境,发现与源代码相关的bug可以帮助避免不必要的风险。这个避坑指南暂时参考这里,以后研究中发现的源码bug会继续更新。有兴趣的朋友欢迎留言私信讨论源码bug。
1.《蓝牙广播 低功耗蓝牙BLE传统广播避坑指南》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《蓝牙广播 低功耗蓝牙BLE传统广播避坑指南》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guoji/788457.html