昨天尝鲜升级了一次手机系统,把系统升级到了Android8.0。今天测试的时候意外发现扫描不到自己的蓝牙小设备(假如定义为设备A)。
描述如下:
1. Android8.0 + nrf connect扫描不到设备A,但是可以正常扫描到苹果手表和小米手环2.
2. Android8.0+系统蓝牙也扫描不到设备A,但是可以正常扫描到苹果手表和小米手环2.
3. Android(其他版本)+ nrf connect可以扫描到设备A和苹果手表和小米手环2.
4. ios+ nrf connect可以扫描到设备A和苹果手表和小米手环2. 苹果手表和小米手环2比设备A多了一行:Service UUID(和incomplete List of 16-bit service UUID值一样)和Service Data
5. ios+ nrf connect能看到设备A是“non-connectable”. Manufacturer Data: N/A
解决方式:
扫描不到说明广播包和Adv response阶段出了问题。检查advertData[]里面的值时发现,设定的字段的长度和实际不符。
修改后,ios+ nrf connect能看到设备A是“Connectable”. Manufacturer Data也正常显示了。
此时Android8.0 + nrf connect也能扫描到设备A了。
总结:
Andriod8.0在系统级,对BLE的广播包做了检查(长度和字段),一旦没有通过检查,就认为是非法设备。索性系统级就不显示该设备。
另外蓝牙5.0的新特性如下http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=508186&typeid=35
对Service UUID和Service UUID的描述如https://www.cnblogs.com/smart-mutouren/p/5882038.html