2015-12-28 4 views
1

Я просто хочу иметь список ближайших имен устройств Bluetooth. Однако peripheral.name всегда равен нулю. Название в рекламном пакете также всегда равно нулю. У меня есть 7 устройств поблизости. Я вижу их, но не их имена.Core bluetooth peripheral.name nil

Я использую следующий код:

[self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:TRANSFER_SERVICE_UUID]] 
              options:nil]; 


- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 

{ 

    NSLog(@"Discovered %@ at %@", peripheral.name, RSSI); 
    _discoveredPeripheral = peripheral; 
    if(![self.mRemoteDevices containsObject:_discoveredPeripheral]) 
    { 
     NSArray *peripherels = [self.centralManager retrievePeripheralsWithIdentifiers:@[_discoveredPeripheral.identifier]]; 
     [self.mRemoteDevices addObject:[peripherels objectAtIndex:0]]; 
     [self.mRemoteTable reloadData]; 
    } 
    NSLog(@"retrieving peripherels: %@", self.mRemoteDevices); 
} 
+0

Я не уверен, но может быть, вам нужно передать такие варианты. @ {CBCentralManagerScanOptionAllowDuplicatesKey: [NSNumber numberWithBool: NO]} вместо nil. У него много вариантов. У меня такое использование. –

+0

Попробуйте не подключаться, пока у вас нет имени или рекламных данных. Если я правильно помню, эта информация идет по частям и может появляться каждый раз, когда появляется новая информация. Возможно, вам придется изменить ключевой параметр allow duplicates. – Larme

ответ

1

Это часто происходит на самом деле, что периферийные имена не разрешены во время открытия. Однако после того, как вы обнаружили периферийное (и, возможно, связанное с ним, я не уверен, действительно ли это необходимо), вы скоро получите свое имя в CBPeripheralDelegate обратном вызове - peripheral:didUpdateName:. Предполагая, что предварительное подключение к периферийному устройству не требуется, вы должны просто дождаться этого обратного вызова и обновить имя надлежащего устройства в своем mRemoteDevices в коде обратного вызова.

Смежные вопросы