Android:绑定 - 具有不同 mac 地址的 2x 事件

问题描述 投票:0回答:0

我正在开发一个简单的原型,其中 Android 应用程序充当外围设备(广告)并从中央设备(扫描)接收连接。 GATT 定义了一个单一的“加密”特征(当中央试图从中读取时,它会触发绑定)。

理论上到目前为止一切顺利。为了进行测试,我已经移除了两部手机的绑定。干净的状态。 iPhone BLE(真实)mac 地址:8C:7A:AA:81:4E:5B。 现在我将 iPhone (iOS 16) 应用程序连接到 Android (S10 / Android 12):

17:17:21.554 connected; status: success; address: 58:34:47:11:A1:F7
>> iPhone (central) tries to read 'encrypted' characteristic
17:18:09.039 state changed: bonding; deviceAddress: 58:34:47:11:A1:F7
>> pairing pop up is accepted on both phones 
17:18:12.141 read request; Address: 58:34:47:11:A1:F7; 
17:18:12.151 state changed: bonding; deviceAddress: 8C:7A:AA:81:4E:5B
17:18:12.709 state changed: bonded;  deviceAddress: 58:34:47:11:A1:F7
17:18:18.096 state changed: bonded; deviceAddress: 8C:7A:AA:81:4E:5B

检查 BluetoothAdapter.bondedDevices:

device [0]: address: 58:34:47:11:A1:F7, state: bonded
device [1]: address: 8C:7A:AA:81:4E:5B, state: bonded

基本上,连接的设备 mac:58:34:47:11:A1:F7,然后绑定发生在 '58:34:47:11:A1:F7' 和 '8C:7A:AA:81:4E:5B '.这真的很奇怪! 8C... 是真实的 iPhone mac 地址。但是我怎么知道呢?据我所知,连接的设备是 58:34:47:11:A1:F7 ....

我的问题/其他观察:

  • 当设备连接时,设备 MAC 可能是随机的? (没关系),但为什么报告了 2 次绑定事件?不涉及其他设备,这是使用不同设备等的持续行为。
  • 当时只有一个来自 GATT 的“读取”请求
  • 最后一次绑定事件发生在 6 秒后..
  • Android 设备在系统设置中创建了两个“绑定设备”(在 iOS 上只有一个)。从 android 中删除一个绑定设备,会自动删除两个条目(所以它绝对是同一台设备)

至于实现,很简单:

  • 使用 BroadcastReceiver (BluetoothDevice.ACTION_BOND_STATE_CHANGED) 观察状态变化
  • 广播接收器只有一个,而且只注册一次
  • 绑定由系统处理(我只在状态更改为“绑定”等后响应读取请求......

这可能是实现错误吗?几乎没有其他我可以检查...

android kotlin android-bluetooth pairing
© www.soinside.com 2019 - 2024. All rights reserved.