Andriod8.0扫描不到BLE设备的原因

     昨天尝鲜升级了一次手机系统,把系统升级到了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

你可能感兴趣的:(CC2640)