xcode 5 CoreBluetooth没有发现外围设备的服务

时间:2013-10-29 19:27:39

标签: xcode service core-bluetooth peripherals

我正在构建几个BLE应用程序,并且遇到了我的BLE协议以及外部供应商的这个问题。在大多数情况下,BLE按预期工作,但有时它将无法发现特定外设的服务,并且在重新启动或重置手机之前无法再次运行。

还有其他人遇到过这个问题吗?

当我完成外围设备后,管理员将调用closePeripheralConnection方法。相关代码:

// Disconnect from peripheral
- (void)closePeripheralConnection
{
    NSLog(@"== closePeripheralConnection ==");
    // If the peripheral is connected
    if (self.peripheral.state == CBPeripheralStateConnected && self.peripheral != nil) {
        // Cancel connection
        [self.manager cancelPeripheralConnection:self.peripheral];
    } else {
        [self clearPeripheralSettings];
    }
}

// Clear peripheral settings
- (void)clearPeripheralSettings
{
    // Clear peripheral variables
    self.peripheral = 0;
    // Clear services
    self.service = 0;
    // Clear characteristic values
    self.data = 0;
    self.notifyCharacteristic = 0;
}

- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
{
    [self clearPeripheralSettings];
}

2 个答案:

答案 0 :(得分:2)

根据代码和你的评论,你没有做任何坏事。它仍然是Core Bluetooth框架的不稳定性,阻碍了您的工作。对于iOS 6来说,这些问题比iOS 7更常见,但严重的压力仍然可以解决问题。 Apple开发者论坛和bluetooth-dev邮件列表中充满了类似的报告。如果您在测试时使用的用法在每天使用时并不常见,那么问题可能与最终用户无关。 (虽然仍然很烦人。)

我建议你尝试收集统计数据。注册您调用每个API的次数,并尝试为Apple建立一些证据,证明该框架仍然不稳定。在NSUserDefaults中存储统计数据可能是最简单的解决方案。

无论如何,如果你有强大的数据可以作为故障的证据,那么将错误报告给Apple,在开发者论坛中发帖,发送邮件到bluetooth-dev列表。让尽可能多的人听到你的声音。

答案 1 :(得分:0)

你什么时候打电话给这个方法?      - closePeripheralConnection

您可能想要添加此内容以要求外围设备在其连接中发现其服务,其中一个是中央管理器回调代理

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {

    NSLog(@"peripheral: %@ state: %@", peripheral.name, peripheral.state == CBPeripheralStateConnected ? @"Connected" : @"Disconnected");

    if (peripheral.state == CBPeripheralStateConnected) {
        peripheral.delegate = self;
        [peripheral discoverServices:nil];
    }

}