0

我正在開發一個使用藍牙技術4.0的接近感應應用程序。我能夠發現這些設備。但我無法與他們配對。我也不能撥打[peripheral readRssi]方法。我想實現這一目標的方式是,如果中央掃描10臺設備,並在找到這些設備之後,應該停止掃描,然後配對設備,然後不斷讀取RSSI值。配對藍牙外設使用ios 5

我的一段代碼。

- (void) centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 
{ 
    BOOL (^test)(id obj, NSUInteger idx, BOOL *stop); 
    test =^(id obj, NSUInteger idx, BOOL *stop) { 
     if([[[obj peripheral] name] compare:peripheral.name] == NSOrderedSame) 
      return YES; 
     return NO; 
    }; 

    PeripheralCell* cell; 
    NSUInteger t=[peripherals indexOfObjectPassingTest:test]; 
    if(t!= NSNotFound) 
    { 
     cell=[peripherals objectAtIndex:t]; 
     cell.peripheral=peripheral; 
     cell.rssi=RSSI; 
     //NSLog(@"%@",RSSI); 
     [scanResultTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:t inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; 
    } 
    else{ 
     cell=[[PeripheralCell alloc] init]; 
     [peripherals addObject: cell]; 
     [myPeripheral addObject: peripheral]; 
     cell.peripheral=peripheral; 
     cell.rssi=RSSI; 
     NSLog(@"UUID===%@",[peripheral UUID]); 
     [scanResultTableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:[peripherals count]-1 inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; 
     if([myPeripheral count]==3) 
     { 
      [manager stopScan]; 
      for(CBPeripheral *p in myPeripheral) 
      { 
       [manager connectPeripheral:p options:nil];  //this calls didConnectPeripheral but gets disconnected after some time 
       [p readRssi];  //this does not work even after connecting 
      } 
     } 
    } 
} 

- (void)centralManagerDidUpdateState:(CBCentralManager *)central 
{ 
    //self.cBReady = false; 
    switch (central.state) { 
     case CBCentralManagerStatePoweredOff: 
      NSLog(@"CoreBluetooth BLE hardware is powered off"); 
      break; 
     case CBCentralManagerStatePoweredOn: 
      NSLog(@"CoreBluetooth BLE hardware is powered on and ready"); 
      //self.cBReady = true; 
      break; 
     case CBCentralManagerStateResetting: 
      NSLog(@"CoreBluetooth BLE hardware is resetting"); 
      break; 
     case CBCentralManagerStateUnauthorized: 
      NSLog(@"CoreBluetooth BLE state is unauthorized"); 
      break; 
     case CBCentralManagerStateUnknown: 
      NSLog(@"CoreBluetooth BLE state is unknown"); 
      break; 
     case CBCentralManagerStateUnsupported: 
      NSLog(@"CoreBluetooth BLE hardware is unsupported on this platform"); 
      break; 
     default: 
      break; 
    } 
} 

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral 
{ 
    NSLog(@"connected peripheral"); 
} 

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error; 
{ 
    NSLog(@"peripheral disconnected"); 
} 

- (void)peripheralDidUpdateRSSI:(CBPeripheral *)peripheral error:(NSError *)error 
{ 
    NSLog(@"updated rssi"); 
} 

我怎麼能配對設備...

回答

1

一番搜索和試錯後,我發現我的代碼是正確的。我只是不得不從iPad的設置中刪除設備。

轉到Settings > General > Bluetooth > Devices.

通過點擊附件指示器選擇設備。在下一個屏幕中點擊「忘記這個設備」。

再次運行應用程序解決了我的問題。