iOS CoreBluetooth同步外设和中央管理器

时间:2014-01-30 18:42:35

标签: ios core-bluetooth

我正在开发一款应用程序,通过蓝牙同步ios设备之间的信息。我试过保持CentralManager和PeripheralManager同时运行,当一个管理器连接时,停止另一个。这有效,但只是间歇性的。在某些时候,CentralManager似乎无法连接到新的外围设备,发现服务等。我回过头来开始使用Apple BTLE-Transfer项目,抽象经理类,然后同时运行。一切都运作良好,直到它们同时活跃。这似乎与其他人报道的相似。

Peripheral and central at the same time on iOS

Can iOS do central and peripheral work on same app at same time?

目前,如果主动管理器没有任何连接,我每隔5秒就会在中央模式和外围模式之间来回翻转。连接时CM停止扫描,PM停止广告。这似乎更加强大,但我看不到它在后台工作。

有没有人取得更大的成功,两位经理同时活跃,或者让“触发器”方法在后台运作。

以下是我在CentralManager中使用的一些代码。我在PeripheralManager中有类似的代码

-(void)connectionTimer:(NSTimer*)timer{
    NSInteger count=[self.connectedPeripherals count];
    if (count>0) {
        NSLog(@"CM Timer connected[%ld]->no switch",(long)count);
    }else{
        NSLog(@"CM Timer no peripheral connected->switch to peripheral");
        [self switchToPeripheral];
    }
}


-(void)addPeripheralToConnected:(CBPeripheral*)peripheral{
    [self stopDetecting];
    self.centralConnected=YES;
    if (![self.connectedPeripherals containsObject:peripheral]) {
        [self.connectedPeripherals addObject:peripheral];
        peripheral.delegate=self;
    }
}

-(void)removePeripheralFromConnected:(CBPeripheral*)peripheral{
    [self cleanup:peripheral];
    [self.connectedPeripherals removeObject:peripheral];
    if ([self.connectedPeripherals count]<1) {
        self.centralConnected=NO;
        [self switchToPeripheral];
    }
}


-(void)switchToPeripheral{
    [self stopDetecting];
    if (!self.peripheralManager) {
        self.peripheralManager=[TNPeripheralManager sharedInstance];
    }else{
        dispatch_async(dispatch_get_main_queue(), ^{
            [NSTimer scheduledTimerWithTimeInterval:SWITCH_TIME  //1 sec
                                             target:self.peripheralManager
                                           selector:@selector(startBroadcasting)
                                           userInfo:nil
                                            repeats:NO];
        });
    }
}

0 个答案:

没有答案