蓝牙 UUID iOS
Bluetooth UUID iOS
我在连接蓝牙 LE 设备时遇到问题。我设法让 centralmanager 工作并且我可以检测到蓝牙 LE 设备,但是,我现在希望能够 link 我的本地存储项目到找到的蓝牙设备,但是没有办法 link 两者有几个原因:
- 我找到的外设,给我一个标识符(我不知道我能用这个做什么,它的来源是哪里)
- 我无法访问原始广告数据。
在我的本地数据库中,我确实可以从设备访问蓝牙 MAC 地址。有没有一种方法可以创建一个与我在外围设备标识符中找到的 UUID 相同的 UUID?
我尝试从字符串创建 NSUUID,但失败了。我还尝试从字符串创建 CBUUID,但也失败了。
MAC地址格式为AA:BB:CC:DD:EE:FF
,可以是数字也可以是字符,外设标识符的格式是AAAAAAAA-BBBB-CCCC-DDDDDDDDDDDD
,可以是数字也可以是字符.任何帮助将不胜感激!
当您在蓝牙中找到任何外设时,您将在下面的委托方法中获得详细信息
- (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;
}
}
此处 identifier Apple 将根据一些计算生成它,并且每次 central找到了。
对于 MAC 地址 有些设备会提供 MAC 地址,但不确定您每次都会得到 Android。
我们有一个选项可以获取 MAC 地址,首先我们需要将外围设备连接到 central(Mobile)。
连接发生后,检查以下方法,您将在 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]);
}
}
我设法通过外围设备广告唯一数据来修复它,我已经在数据库中拥有这些数据。我可以 link 此数据到列表项。我在 didDiscover
函数中执行此操作。
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
let uniqueID = (advertisementData["kCBAdvDataServiceUUIDs"] as! NSArray).firstObject!
}
我在连接蓝牙 LE 设备时遇到问题。我设法让 centralmanager 工作并且我可以检测到蓝牙 LE 设备,但是,我现在希望能够 link 我的本地存储项目到找到的蓝牙设备,但是没有办法 link 两者有几个原因:
- 我找到的外设,给我一个标识符(我不知道我能用这个做什么,它的来源是哪里)
- 我无法访问原始广告数据。
在我的本地数据库中,我确实可以从设备访问蓝牙 MAC 地址。有没有一种方法可以创建一个与我在外围设备标识符中找到的 UUID 相同的 UUID?
我尝试从字符串创建 NSUUID,但失败了。我还尝试从字符串创建 CBUUID,但也失败了。
MAC地址格式为AA:BB:CC:DD:EE:FF
,可以是数字也可以是字符,外设标识符的格式是AAAAAAAA-BBBB-CCCC-DDDDDDDDDDDD
,可以是数字也可以是字符.任何帮助将不胜感激!
当您在蓝牙中找到任何外设时,您将在下面的委托方法中获得详细信息
- (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;
}
}
此处 identifier Apple 将根据一些计算生成它,并且每次 central找到了。 对于 MAC 地址 有些设备会提供 MAC 地址,但不确定您每次都会得到 Android。 我们有一个选项可以获取 MAC 地址,首先我们需要将外围设备连接到 central(Mobile)。 连接发生后,检查以下方法,您将在 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]);
}
}
我设法通过外围设备广告唯一数据来修复它,我已经在数据库中拥有这些数据。我可以 link 此数据到列表项。我在 didDiscover
函数中执行此操作。
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
let uniqueID = (advertisementData["kCBAdvDataServiceUUIDs"] as! NSArray).firstObject!
}