2013-05-14 58 views
2

好的,我正在使用Core Bluetooth将我的i-Pad连接到另一个BLE传感器。 我很容易扫描和检测,但是当我想要建立连接时,“连接外围设备”方法仅在30秒内调用,就像我呼叫断开连接一样... 即使我选择了此结果或在需要的背景模式下取消选择“使用CoreBluetooth进行应用通信”。iOS 6外设在连接后立即断开

- (id) init 
{ 
    self = [super init]; 
    if (self) 
    { 
     pendingInit = YES; 
     centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()]; 

     foundPeripherals = [[NSMutableArray alloc] init]; 
     connectedServices = [[NSMutableArray alloc] init]; 
    } 
    return self; 
} 



- (void) centralManagerDidUpdateState:(CBCentralManager *)central 
{ 
    static CBCentralManagerState previousState = -1; 
    switch ([centralManager state]) 
    { 
     case CBCentralManagerStateUnsupported: 
     { 
      NSLog(@"NSCentralManager State Unsupported..."); 
      break; 
     } 
     case CBCentralManagerStatePoweredOff: 
     { 
      NSLog(@"NSCentralManager State Powered OFF"); 
      [self clearDevices]; 
      [discoverPeripheralDelegate discoveryDidRefresh]; 

      if (previousState != -1) 
      { 
       [discoverPeripheralDelegate discoveryStatePoweredOff]; 
      } 
      break; 
     } 

     case CBCentralManagerStateUnauthorized: 
     { 
      NSLog(@"NSCentralManager State Unauthorized: the application is not allowed"); 
      break; 
     } 

     case CBCentralManagerStateUnknown: 
     { 
      NSLog(@"NSCentralManager state unknown... Bad News..."); 
      break; 
     } 

     case CBCentralManagerStatePoweredOn: 
     { 
      NSLog(@"NSCentralManager State Powered ON!"); 
      pendingInit = NO; 
      [self loadSavedDevices]; 

      [centralManager retrieveConnectedPeripherals]; 
      [discoverPeripheralDelegate discoveryDidRefresh]; 
      break; 
     } 

     case CBCentralManagerStateResetting: 
     { 
      NSLog(@"CBCentralManager State Resetting"); 
      [self clearDevices]; 
      [discoverPeripheralDelegate discoveryDidRefresh]; 
      [peripheralDelegate alarmServiceDidReset]; 

      pendingInit = YES; 
      break; 
     } 
    } 
    previousState = [centralManager state]; 
} 


- (void) loadSavedDevices 
{ 
    storedDevices = [[NSArray alloc] initWithObjects:kPressureServiceUUIDString, nil]; 

    for (id deviceUUIDString in storedDevices) { 

      if (![deviceUUIDString isKindOfClass:[NSString class]]) 
       continue; 

      CFUUIDRef uuid = CFUUIDCreateFromString(NULL, (CFStringRef)deviceUUIDString); 
      if (!uuid) 
       continue; 

      storedUUIDs = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"StoredUUIDS"]]; 
      for (int i = 0; i < storedUUIDs.count; i++) { 
       NSArray * tempStoredUUIDs = storedUUIDs[i]; 
       storedUUIDs[i] = [tempStoredUUIDs mutableCopy]; 
      } 

      [centralManager scanForPeripheralsWithServices:nil options:nil]; 
      storedUUIDs = [[NSMutableArray alloc] init]; 
      [[NSUserDefaults standardUserDefaults] setObject:storedUUIDs forKey:@"StoredUUIDS"]; 
     } 
} 




- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 
{ 
    NSString * finaluuids = [NSString stringWithFormat:@"%@",peripheral.UUID]; 
    if (storedUUIDs.count == 0) 
    { 
     storedUUIDs = [[NSMutableArray alloc] initWithObjects:finaluuids, nil]; 
     [centralManager stopScan]; 
     [centralManager connectPeripheral:peripheral options:nil]; 
    } 
} 




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

这是我的控制台。我没有任何警告,任何错误或释放只是:

2013-05-14 09:21:14.925 PRESSURE[262:907] connected 
2013-05-14 09:21:14.927 PRESSURE[262:907] Service (Sensor) connected 
2013-05-14 09:21:44.994 PRESSURE[262:907] Service (Sensor) disconnected 

如何避免我的外设断开后立即断开连接? 这让我疯狂!

+0

我有一个错误:尝试连接到外设传感器断开连接:指定的设备已与我们断开连接。 – user2382658 2013-05-15 00:39:41

+1

您是否在使用'CBPeripheral'对象时连接:'didConnect'委托中的'yourPeripheral = peripheral'并设置其委托:'yourPeripheral setDelegate:self'(self或other class)? – Larme 2013-05-15 10:08:13

+1

您连接的实际BLE设备是什么? – 2013-07-19 18:07:51

回答

0

您必须在didDiscoverPeripheral上执行[外设保留]或将其放入retain属性中。 它是通过BLE框架连接后发布的。

相关问题