Ios7 如何使用core bluetooth填充可移动iPad和iPhone的列表

Ios7 如何使用core bluetooth填充可移动iPad和iPhone的列表,ios7,bluetooth,core-bluetooth,Ios7,Bluetooth,Core Bluetooth,我正在尝试使用核心蓝牙创建一个简单的浏览器,它可以发现附近的iPhone和iPad,并在表视图中显示它们。到目前为止,我正在实施中央管理器并收到通知。信息似乎有点神秘 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber

我正在尝试使用核心蓝牙创建一个简单的浏览器,它可以发现附近的iPhone和iPad,并在表视图中显示它们。到目前为止,我正在实施中央管理器并收到通知。信息似乎有点神秘

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
    NSLog(@"Did discover peripheral. peripheral: %@ rssi: %@, UUID: %@ advertisementData: %@ ", peripheral, RSSI, peripheral.UUID, advertisementData);
} 
这些信息似乎有点神秘,因为某些原因,并非所有的设备都有name参数

2014-09-22 13:11:13.142谁发现了外围设备。外围设备:
0x1780b4f40 identifier = 9373F3AD-726D-2EC9-AB2C-BBAB9B2ED319, Name = "(null)", state = disconnected> rssi: -63, UUID: <CFUUID 0x178036ee0> 9373F3AD-726D-2EC9-AB2C-BBAB9B2ED319 advertisementData: {
    kCBAdvDataChannel = 37;
    kCBAdvDataIsConnectable = 1;
}
而其他人则如此

2014-09-22 13:13:26.224 WhoDat[3333:60b] Did discover peripheral. peripheral: <CBPeripheral: 0x1700b4b80 identifier = 74E42396-CB35-3FB7-A855-F2BB78AC2C78, Name = "Zip", state = disconnected> rssi: -95, UUID: <CFUUID 0x17002da60> 74E42396-CB35-3FB7-A855-F2BB78AC2C78 advertisementData: {
    kCBAdvDataChannel = 39;
    kCBAdvDataIsConnectable = 1;
    kCBAdvDataServiceData =     {
        "Device Information" = <0204>;
    };
    kCBAdvDataServiceUUIDs =     (
        "ADAB67D3-6E7D-4601-BDA2-BFFAA68956BA"
    );
} 

但我似乎无法区分什么是什么。我遗漏了什么吗?

您没有收到姓名的最可能原因是该设备没有在其广告包中发布姓名

为了让事情变得更奇怪,CoreBluetooth做了一些缓存,这会在与设备交互时产生奇怪的不一致

一个主要的例子是,如果你连接到一个没有公布其名称的设备,它将显示其缓存的名称


我的建议是,在通过连接到所述设备收到一个名称之前,使用一个没有名称的字符串来表示它。

如果需要检查名称是否为空,可以进行筛选。问题是,并非所有设备在广告数据中都有相同的信息,例如,没有KCBADVDATAServiceUUID。作为另一个信息,iPhone将逐段获取所有信息,这就是为什么有时名称为空。