This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Android手机升级后不能发现CC2541

Other Parts Discussed in Thread: CC2541

官方库  BLE-CC254x-1.4.2.2

例程     SimpleBLEPeripheral

手机   华为荣耀7x

手机系统 升级到Android 8.0

现象:

      1、在Android未升级前,打开nRF Connect可扫描到CC2541,Android升级后,nRF Connect不能扫描到CC2541,但在IOS上使用nRF Connect可以扫描到。

       2、将升级后的Android手机打开nRF Connect,并等待很长时间后,偶尔也有发现CC2541的现象,但需要等待的时间较长。

       3、使用IOS的nRF Connect模拟发出广播报文,升级后的Android手机可以正常接收到报文。

已经排查:

       1、已经排查广播包PDU长度不对,导致的Android 8.0不能发现的问题,确认应该不是该问题导致。

        2、程序中所有参数和设置均为例程中给出,未修改。

  • 参考下这边的类似问题,扫描应答数据的长度问题: e2e.ti.com/.../687468
  • Hi , Viki Shi
    我检查了扫描应答数据的长度,是符合要求的。我也尝试修改应答数据到更小的长度,仍然不能被手机发现。
  • 查一下安卓8.0升级的release note,看看对蓝牙这块的参数是否有改动
  • Hi, Viki Shi

    我查看的安卓8.0的release note,其中蓝牙最初接收扫描数据时,将不再有长度限制,描述如下:

    ---------------------------------------------------------------------------------安卓8.0行为变更----------------------------------------------------------------------------------------

    Android 8.0 对 ScanRecord.getBytes()函数检索的数据长度做出以下变更:

    • getBytes() 函数对于所接收的字节数不作任何假定。因此,应用不应受所返回的任何最小或最大字节数的影响。相反,应用应当计算所返回数组的长度。
    • 兼容蓝牙 5 的设备返回的数据长度可能会超出之前最大约 60 个字节的限制。
    • 如果远程设备未提供扫描响应,则也可能返回少于 60 个字节的数据。

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    因而我猜测CC2541实际发出的数据除了程序中设置的GAPROLE_ADVERT_DATA外,还有其他数据,导致Android后期处理数据时引发异常。

    我通过Packet Sniffer抓包发现,CC2541发出ADV数据后,安卓并没有返回对应的Request包,所以有上面的猜测