Mik*_*ike 3 ios core-bluetooth
在centralManager中:didDiscoverPeripheral:advertisementData:RSSI(下面的完整代码),我在NSDictionary中找到一个名为kCBAdvDataServiceUUIDs的密钥.我正在尝试读取此数据以确定设备上可用的服务.这些数据的格式是什么?课程描述很简单
Unknown (<fff0>)
Run Code Online (Sandbox Code Playgroud)
这是来源:
- (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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
以下是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
Run Code Online (Sandbox Code Playgroud)
Mik*_*ike 13
经过一番挖掘,这是我发现的:
广告数据作为参数传递给centralManager:didDiscoverPeripheral:advertisementData:RSSI是一个NSDictionary,似乎总是包含至少一个名为kCBAdvDataServiceUUIDs的密钥.与此键关联的值是CBUUID类型的对象的NSArray.
尽管在许多地方都使用过CBUUID,但是在iOS 5文档中没有记录CBUUID,包括我见过的每个Apple LE蓝牙LE样本.其中的一个方法是调用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7468 次 |
| 最近记录: |