592如何正确把rpa地址加到定向广播中

目前开发蓝牙,尝试与安卓12系统进行配对。

现象:

第一次配对完成,获取到的安卓的地址devAddr是一个public address的mac地址,并手动将其加入了定向广播白名单GAPROLE_ADV_DIRECT_ADDR中。


当配对完成后,断开并重新连接时,安卓无法连接到该定向广播。

此时将定向广播改为非定向广播,重新建立连接后,发现此时安卓使用的mac地址变成了一个rpa地址,type 3类型,因为该地址不在白名单中,导致的无法连接

将该地址重新加入到定向广播白名单,再断开并尝试重新连接,就可以重连了。


请教如何解决这个问题,目前我有一下几个思路

1、第一次链接后,计算出下次安卓要用的rpa地址(这可能吗?不确定)

2、不使用定向广播,使用非定向广播+采用白名单制来解析RPA,让对方先链接上再判断是否允许链接(正常的蓝牙音响这种东西是这么做的吗?不确定)



当然如果有其他更合理的方案请给出,谢谢!

白名单回连和定向广播回连都可以做。建议使用白名单回连的方式。

白名单回连需要生成可解析地址。

定向广播需要获取固定地址。

可以参考博客:

蓝牙BLE从机Peripheral讲解三(定向广播/Direct Adv) - SweetTea_lllpc - 博客园 (cnblogs.com)

蓝牙BLE从机Peripheral讲解四(白名单/BLE_WhiteList) - SweetTea_lllpc - 博客园 (cnblogs.com)

断开连接后,查看是否有重新开启广播,如果是waiting for advertising,则代表没有广播状态,需要再手动开启广播。



现在采用了白名单,可以正常被普通的rpa地址链接。但是现在遇到一个更奇怪的问题。


592作为从机,安卓12作为主机,关闭从机的白名单,进行第一次配对连接时,安卓主机使用的mac地址是一个public address,此时配对连接正常使用。

当断开连接后,第二次重新建立连接的时候,发现安卓无法连接到从机。

于是手动关闭白名单后,安卓正常建立连接。然后发现本次连接,安卓采用了一个rpa地址。


请教这种情况应该怎么解决?为什么第一次是public地址,第二次变成rpa地址了?这种情况下如何做白名单?

我又测试了其他安卓机,其他的安卓机第一次建立链接就使用的是rpa,第二次仍然使用rpa,所以可以正常重连。没有遇到这种第一次是public 第二次是rpa的情况。

请大佬指点,不胜感激


安卓手机的MAC地址是会变化,所以需要进行解析,解析的目的是为了获取到手机真实的MAC地址。

针对白名单,或者获取可解析地址。使用可解析地址进行回连。

使用公共地址,过15min后地址出现变化就无法进行连接了。所以建议,直接使用真实地址。

因此白名单标准的流程,先绑定,然后解析,根据解析进行回连。白名单使用这个方式。

定向广播标准流程,先绑定,然后获取真实MAC,并进行回连。

可以留下邮箱,提供代码参考。


个人信息保护,已隐藏,麻烦提供一下demo。

离谱的事情是,我第一次跟安卓12配对,安卓12用的就是真实mac地址,只要清空配对进行第一次绑定,这个mac永远不变,一直是public address。


第一次反而不知道可解析地址,必须断联后让主机启动重连,让从机关闭白名单,重连成功后,得到的才是可解析地址,所以导致我必须配对两遍才可以回连。


我测试了其他手机,安卓10,14都不是这样的,唯独这个手里的安卓12是这个逻辑,特别奇怪,不知道是不是这个安卓系统有魔改过什么东西?


已发送至邮箱,请查收。


只有登录才能回复,可以选择微信账号登录