大部分时间,这在我的应用程序中正常工作。不幸的是,有时它在调用发现服务后从未被触发过。
我的代码是:
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
NSLog(@"Did connect to peripheral: %@", peripheral);
[self.delegate statusMessage:[NSString stringWithFormat:@"Did connect to peripheral: %@\n", peripheral]];
peripheral.Delegate = self;
NSArray *serviceArray = [NSArray arrayWithObject:_uuid_tpms_sensor_service];
[_peripheral discoverServices:serviceArray];
[peripheral discoverServices:serviceArray ];
}
与此相关的一些帖子是
最终结论应该是iOS中的一个问题。我的问题是,鉴于它的iOS问题,如何解决这个问题?
答案 0 :(得分:1)
非常感谢Larme和henrik,因为我从你的回复中得到了很多想法。
经过三天的验证,似乎我找到了解决这个问题的方法(问题更可能是限制iOS的蓝牙堆栈而不是问题)
我想总结一下我的发现并在这里解决:
[根本原因]
follow the API sequence of connectperiperal-->discover-->read-->disconnect
(由链路层上的本地,对等设备或监督超时触发)。 <强> [分辨率] 强>
希望摘要对其他人有用。
答案 1 :(得分:0)
太多流氓app没有正确处理BLE堆栈会导致崩溃。然后手机需要重新启动。 iOS7和8比iOS BLE的早期版本更强大。 Android仍然不那么健壮。程序员忘记释放资源,或者可能在传输旧数据之前尝试编写新数据。
如果您使用X代码并且在释放资源等之前就停止了应用程序,这可能会发生很多事情。这仍然会导致iOS BLE堆栈崩溃。