【问题标题】:CoreBluetooth: the UUID of a peripheral is an inherent attribute of a device?CoreBluetooth:外围设备的 UUID 是设备的固有属性吗?
【发布时间】:2015-03-13 09:52:40
【问题描述】:

我使用 CoreBluetooth 将我的 iPhone 与配备 Bluetooth 4.0 的设备连接。

我打印它的(作为外围设备)UUID:

<CBPeripheral: 0x1742fca80, identifier = B148AD69-1FC7-498C-016F-33BA3BE041A3, name = HMSoft, state = disconnected>

我想知道这个标识符是否是设备的固有属性。

由于我在 android 中使用以下代码来获取它的 UUID,这与我在 iPhone 中使用 CoreBluetooth 得到的不同: p>

 BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
 for (ParcelUuid uuid : device.getUuids()) {
                    Log.d("UUID", uuid.getUuid().toString());
                }

(我连接的是同一个设备,但打印的 UUID 不同)。

【问题讨论】:

  • 外设的UUID在每次扫描中都是唯一的,但iPhone和Android扫描的结果不同。
  • 没错。给定的 iOS 设备对于给定的外围设备将始终看到相同的 UUID,但不同的 iOS 设备将为同一外围设备获得不同的 UUID,并且 UUID 不是 MAC 地址 - 它是由 iOS 创建的
  • android 有 API 获取外围设备的 mac 地址,而 iOS 中的 coreBluetooth 似乎没有公共 API。如何获取对 iOS 和 android 都具有一致性的唯一标识符?
  • 您不能 - iOS 不会公开该标识符。我确实看到了一个答案,其中设备的设备信息特征包含 MAC,但这可能取决于设备,需要您连接到设备才能读取特征

标签: android ios uuid core-bluetooth


【解决方案1】:

CBPeripheral 中的标识符是随机生成的唯一标识符。这会随着时间的推移而变化。对于 CBPeripheral,我们需要了解两种 UUID。一个是 ServiceUUID,另一个是 CharacteristicUUID。每个外围设备通过每个服务广播数据。单个服务可以具有多个特征。例如。设备信息服务可以有设备名称、设备版本等作为其特征。

请参阅下图以更好地理解CBPeripheral。 Apple docs 在这方面讲得很好。

【讨论】:

    【解决方案2】:

    我的第一个答案,所以我希望我不会自欺欺人;-)

    BluetoothDevice.getUuids(): 返回远程设备支持的功能 (UUID)。 IE。设备通告的服务的 UUID,而不是设备本身的 UUID。 我目前正在寻找一种 Android 方法来获取已发现的 BLE 设备的 UUID...

    【讨论】:

      猜你喜欢
      • 2013-10-13
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2016-05-06
      • 2013-07-21
      • 2013-12-13
      相关资源
      最近更新 更多