如何解决BLE 和 Android:使用设备公共地址进行直接连接
我是 BLE 的新手,因此是 Android 上的 BLE,我正在尝试了解 Android 如何管理 BLE 地址。 查看不同的帖子和 android 文档,我了解到 Android 正在通过在广告和扫描时使用私有可解析地址来强制执行 LE 隐私。
我有一个具有挑战性的时序约束的用例,理想情况下,我想通过使用它们的 MAC 地址而不是执行通常的扫描/广告发现在 2 个 Android 设备之间执行直接 BLE 连接。
遗憾的是,出于隐私原因,Android 现在使用 BluetoothAdapter.getAddress()
阻止访问当前设备地址,这会阻止任何带外流共享 BLE 地址。
我想知道Android中心设备有没有办法使用设置在外设模式的Android设备的蓝牙公共地址(设备设置中显示的,即设置/关于手机/蓝牙地址)?>
我尝试使用以下流程但没有成功,所以我猜这是不可能的:
在外围设备上:
- 在设备设置中找到BT公共地址
- 启动 GATT 服务器
- 使用特定的 UUID 开始广告。这将使用新的 BLE 私有地址,但不会被中央设备使用。这主要是将设备设置为外设/广告模式。
在中央设备上:
- 直接连接外设公网地址:
BluetoothDevice bleDevice = mbtAdapter.getRemoteDevice(peripheralStaticPublicAddress);
connectGATT(bleDevice,context);
感谢您的帮助!
EDIT 1:我尝试使用系统权限 android.permission.LOCAL_MAC_ADDRESS
,因为我的设备已植根。我可以使用 BluetoothAdapter.getAddress()
方法获取外围设备自己的公共地址,但在中央设备上打开到此地址的 GATT 连接似乎不起作用(无论是否在外围设备上做广告)。
解决方法
只有当中心支持“解析列表”(即实际上不是太旧)并且设备绑定时,您才应该能够使用外围设备的公共地址(它作为身份地址存储在绑定条目中)身份解析密钥)以连接到它。远程设备必须做广告。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。