什么';iOS Bluetooth LE kCBAdvDataServiceUUIDs的格式是什么?

什么';iOS Bluetooth LE kCBAdvDataServiceUUIDs的格式是什么?,ios,core-bluetooth,Ios,Core Bluetooth,在centralManager:DidDiscoveryPeripheral:advertisementData:RSSI(下面的完整代码)中,我在NSDictionary中找到一个名为kCBAdvDataServiceUUIDs的键。我正在尝试读取此数据以确定设备上可用的服务。这个数据是什么格式的?类的描述很简单 Unknown (<fff0>) 未知() 以下是消息来源: - (void) centralManager: (CBCentralManager *) centra

在centralManager:DidDiscoveryPeripheral:advertisementData:RSSI(下面的完整代码)中,我在NSDictionary中找到一个名为kCBAdvDataServiceUUIDs的键。我正在尝试读取此数据以确定设备上可用的服务。这个数据是什么格式的?类的描述很简单

Unknown (<fff0>)
未知()
以下是消息来源:

- (void) centralManager: (CBCentralManager *) central
  didDiscoverPeripheral: (CBPeripheral *) aPeripheral
      advertisementData: (NSDictionary *) advertisementData
                   RSSI: (NSNumber *) RSSI
{
printf("Discovered %s\n", [[aPeripheral name] cStringUsingEncoding: NSUTF8StringEncoding]); // TODO: Remove printfs
    printf("  RSSI: %s\n", [[RSSI stringValue] cStringUsingEncoding: NSUTF8StringEncoding]);
    NSArray *keys = [advertisementData allKeys];
    for (int i = 0; i < [keys count]; ++i) {
        id key = [keys objectAtIndex: i];
        NSString *keyName = (NSString *) key;
        NSObject *value = [advertisementData objectForKey: key];
        if ([value isKindOfClass: [NSArray class]]) {
            printf("   key: %s\n", [keyName cStringUsingEncoding: NSUTF8StringEncoding]);
            NSArray *values = (NSArray *) value;
            for (int j = 0; j < [values count]; ++j) {
                NSObject *aValue = [values objectAtIndex: j];
                printf("       %s\n", [[aValue description] cStringUsingEncoding: NSUTF8StringEncoding]);
                printf("       is NSData: %d\n", [aValue isKindOfClass: [NSData class]]);
            }
        } else {
            const char *valueString = [[value description] cStringUsingEncoding: NSUTF8StringEncoding];
            printf("   key: %s, value: %s\n", [keyName cStringUsingEncoding: NSUTF8StringEncoding], valueString);
        }
    }
}
-(无效)中央管理器:(CBCentralManager*)中央
DidDiscoveryPeripheral:(CBPeripheral*)个人
advertisementData:(NSDictionary*)advertisementData
RSSI:(NSNumber*)RSSI
{
printf(“发现的%s\n”,[[aperiferal name]cStringUsingEncoding:NSUTF8StringEncoding]);//TODO:删除printfs
printf(“RSSI:%s\n”,[[RSSI stringValue]cStringUsingEncoding:NSUTF8StringEncoding]);
NSArray*keys=[advertisementData allKeys];
对于(int i=0;i<[键计数];++i){
id key=[keys objectAtIndex:i];
NSString*keyName=(NSString*)键;
NSObject*值=[advertisementData objectForKey:key];
if([value iskindof类:[NSArray类]]){
printf(“键:%s\n,[keyName cStringUsingEncoding:NSUTF8StringEncoding]);
NSArray*值=(NSArray*)值;
对于(int j=0;j<[值计数];++j){
NSObject*aValue=[values objectAtIndex:j];
printf(“%s\n”,[[aValue description]cStringUsingEncoding:NSUTF8StringEncoding]);
printf(“is NSData:%d\n”,[aValue IsKindof类:[NSData类]]);
}
}否则{
const char*valueString=[[value description]cStringUsingEncoding:NSUTF8StringEncoding];
printf(“键:%s,值:%s\n”,[keyName cStringUsingEncoding:NSUTF8StringEncoding],valueString);
}
}
}
以下是TI CC2250微型开发工具包中钥匙盒的输出:

Discovered (null)
  RSSI: -36
   key: kCBAdvDataServiceUUIDs
       Unknown (<fff0>)
       is NSData: 0
Discovered SimpleBLEPeripheral
  RSSI: -37
   key: kCBAdvDataServiceUUIDs
       Unknown (<fff0>)
       is NSData: 0
   key: kCBAdvDataLocalName, value: SimpleBLEPeripheral
   key: kCBAdvDataTxPowerLevel, value: 0
已发现(空)
RSSI:-36
密钥:kCBAdvDataServiceUUIDs
未知()
是否为NSData:0
发现单纯形外周
RSSI:-37
密钥:kCBAdvDataServiceUUIDs
未知()
是否为NSData:0
键:kCBAdvDataLocalName,值:SimpleBelPeripheral
键:KCBADVDATAXPOWERLLEVEL,值:0

在四处挖掘之后,我发现:

作为参数传递给centralManager:DidDiscoveryPeripheral:advertisementData:RSSI的播发数据是一个NSDictionary,它似乎始终至少包含一个名为KCBADVDataServiceUUID的键。与此键关联的值是CBUUID类型的对象的NSArray

尽管CBUUID在很多地方都有使用,包括我所见过的每个苹果蓝牙产品,但它并没有在iOS 5文档中记录。在它的方法中有一种叫做
data
的方法,它返回一个NSData对象。此NSData对象将UUID编码为一系列字节

因此,要获取并在本例中查看BLE播发的UUID中的字节,可以使用如下代码:

- (void) centralManager: (CBCentralManager *) central
  didDiscoverPeripheral: (CBPeripheral *) aPeripheral
      advertisementData: (NSDictionary *) advertisementData
                   RSSI: (NSNumber *) RSSI
{
    printf("Discovered %s\n", [[aPeripheral name] cStringUsingEncoding: NSUTF8StringEncoding]); // TODO: Remove printfs
    printf("  RSSI: %s\n", [[RSSI stringValue] cStringUsingEncoding: NSUTF8StringEncoding]);
    NSArray *keys = [advertisementData allKeys];
    for (int i = 0; i < [keys count]; ++i) {
        id key = [keys objectAtIndex: i];
        NSString *keyName = (NSString *) key;
        NSObject *value = [advertisementData objectForKey: key];
        if ([value isKindOfClass: [NSArray class]]) {
            printf("   key: %s\n", [keyName cStringUsingEncoding: NSUTF8StringEncoding]);
            NSArray *values = (NSArray *) value;
            for (int j = 0; j < [values count]; ++j) {
                if ([[values objectAtIndex: j] isKindOfClass: [CBUUID class]]) {
                    CBUUID *uuid = [values objectAtIndex: j];
                    NSData *data = uuid.data;
                    printf("      uuid(%d):", j);
                    for (int j = 0; j < data.length; ++j)
                        printf(" %2X", ((UInt8 *) data.bytes)[j]);
                    printf("\n");
                } else {
                    const char *valueString = [[value description] cStringUsingEncoding: NSUTF8StringEncoding];
                    printf("      value(%d): %s\n", j, valueString);
                }
            }
        } else {
            const char *valueString = [[value description] cStringUsingEncoding: NSUTF8StringEncoding];
            printf("   key: %s, value: %s\n", [keyName cStringUsingEncoding: NSUTF8StringEncoding], valueString);
        }
    }
}
-(无效)中央管理器:(CBCentralManager*)中央
DidDiscoveryPeripheral:(CBPeripheral*)个人
advertisementData:(NSDictionary*)advertisementData
RSSI:(NSNumber*)RSSI
{
printf(“发现的%s\n”,[[aperiferal name]cStringUsingEncoding:NSUTF8StringEncoding]);//TODO:删除printfs
printf(“RSSI:%s\n”,[[RSSI stringValue]cStringUsingEncoding:NSUTF8StringEncoding]);
NSArray*keys=[advertisementData allKeys];
对于(int i=0;i<[键计数];++i){
id key=[keys objectAtIndex:i];
NSString*keyName=(NSString*)键;
NSObject*值=[advertisementData objectForKey:key];
if([value iskindof类:[NSArray类]]){
printf(“键:%s\n,[keyName cStringUsingEncoding:NSUTF8StringEncoding]);
NSArray*值=(NSArray*)值;
对于(int j=0;j<[值计数];++j){
if([[values-objectAtIndex:j]是类:[CBUUID-class]]{
CBUUID*uuid=[values-objectAtIndex:j];
NSData*data=uuid.data;
printf(“uuid(%d):”,j);
对于(int j=0;j
[advertisementData description]给出了相同的结果