蓝牙UUID iOS

时间:2017-04-28 12:10:23

标签: ios swift bluetooth-lowenergy uuid

我在连接蓝牙LE设备时遇到问题。我设法让一个中央管理员工作,我可以检测蓝牙LE设备,但是,我现在希望能够将我的本地存储物品链接到找到的蓝牙设备,但是没有办法将两者联系起来有几个原因:

  1. 我找到的外围设备,给我一个标识符(我不知道我能用这个做什么以及它来自哪里)
  2. 我无法访问原始广告数据。
  3. 在我的本地数据库中,我可以从设备访问蓝牙MAC地址。有没有办法创建一个等于我在外设标识符中找到的UUID?

    我曾尝试从字符串创建NSUUID,但失败了。我也尝试从字符串创建一个CBUUID,但那也失败了。

    MAC地址采用AA:BB:CC:DD:EE:FF格式,可以是数字和字符,外围设备标识符的格式为AAAAAAAA-BBBB-CCCC-DDDDDDDDDDDD,可以是数字和字符。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

如果您发现任何蓝牙外围设备,您将在下面的委托方法

中获得详细信息
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{
    <CBPeripheral: 0x18092fa0, identifier = 123JKDSF-F0E3-F96A-F0A3-64A68508A53C, name = PERIPHERAL_NAME, state = disconnected>
     advertisementData 
    {
      kCBAdvDataIsConnectable = 0;
      kCBAdvDataLocalName = PERIPHERAL_NAME;
      }
}

此处标识符 Apple会根据某些计算生成它,每当中央找到它时,它应该每次都对同一个外围设备进行更改。 对于MAC地址某些设备将提供MAC地址,但不确定您是否每次都会获得 Android 。 我们有一个选项可以获得 MAC 地址,首先我们需要将外围设备连接到中心(移动)。 连接发生后,请检查以下方法,您将在 iOS

中获得蓝牙设备的 MAC 地址
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error;
{
for (CBCharacteristic *characteristic in service.characteristics)
        {
            [peripheral readValueForCharacteristic:characteristic];
            [peripheral setNotifyValue:YES forCharacteristic:characteristic];
        }
 }

- (void) peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{        uint8_t val[characteristic.value.length];
        [characteristic.value getBytes:val length:characteristic.value.length];
        if ([characteristic.UUID.UUIDString isEqualToString:BT_SIG_DEVICE_INFO_SYSTEM_ID])
        {
          NSString * strDeviceID = [NSString stringWithFormat:@"%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",val[7],val[6],val[5],val[2],val[1],val[0]];
        NSLog(@"strDeviceID.ServerID= %@",[strDeviceID uppercaseString]);
    }
}

答案 1 :(得分:0)

我设法通过我在数据库中已经拥有的外围设备来传播唯一数据来修复它。我可以将此数据链接到列表项。我在didDiscover函数中执行此操作。

func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
    let uniqueID = (advertisementData["kCBAdvDataServiceUUIDs"] as! NSArray).firstObject!
}