我实际上是使用Corebluetooth在iPhone和iPad之间交换信息。
我的iPhone充当中央,我的iPad充当外围设备。
我正在宣传我的服务,但在我的中心点我正在浏览:
peripheral:didDiscoverServices:
我在该方法中获得的peripheral.services为空。
在我错误地从外围设备断开连接后几秒钟:
DISCONNECT-ERROR desc : Error Domain=CBErrorDomain Code=7 "The specified device has disconnected from us." UserInfo=0x16e60f90 {NSLocalizedDescription=The specified device has disconnected from us.}
我不知道发生了什么。
修改
在中央方面,我有这个:-(void)startScanning{
[super startScanning];
// Scan for devices
[self.centralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:PERIPHERAL_SERVICE_UUID]] options:nil];
}
#pragma mark Peripheral Delegate
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error {
if (error) {
[self cleanup];
return;
}
for (CBService *service in peripheral.services) {
[peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:NEW_COMMANDS_NOTIFIER_CHARACTERISTICS_UUID]] forService:service];
}
// Discover other characteristics
}
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error {
if (error) {
[self cleanup];
return;
}
for (CBCharacteristic *characteristic in service.characteristics) {
if (self.commandsFromIpadCharacteristic != characteristic) {
self.commandsFromIpadCharacteristic = characteristic;
}
if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:NEW_COMMANDS_NOTIFIER_CHARACTERISTICS_UUID]]) {
[peripheral setNotifyValue:YES forCharacteristic:characteristic];
}
}
}
在外围方面,我有:
#pragma mark CBPeripheralManagerDelegate
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral{
if (peripheral.state != CBPeripheralManagerStatePoweredOn) {
return;
}
if (peripheral.state == CBPeripheralManagerStatePoweredOn) {
self.datasFromIphoneCharacteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:NEW_DATAS_FROM_IPHONE_CHARACTERISTICS_UUID] properties:CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsWriteable];
self.commandNotifierCharacteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:NEW_COMMANDS_NOTIFIER_CHARACTERISTICS_UUID] properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];
CBMutableService *transferService = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:PERIPHERAL_SERVICE_UUID] primary:YES];
transferService.characteristics = @[self.datasFromIphoneCharacteristic, self.commandNotifierCharacteristic];
[self.peripheralManager addService:transferService];
[self.peripheralManager startAdvertising:@{CBAdvertisementDataServiceUUIDsKey : @[[CBUUID UUIDWithString:PERIPHERAL_SERVICE_UUID]]}];
}
}
- (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error {
if (error) {
NSLog(@"Error advertising: %@", [error localizedDescription]);
}
}
- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic {
if (characteristic == self.commandNotifierCharacteristic){
// on envoie le message au delegate
if([[self delegate] respondsToSelector:@selector(iPhoneIsConnectedToIpad:)]) {
[[self delegate] iPhoneIsConnectedToIpad:YES];
}
}
}
-(void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didUnsubscribeFromCharacteristic:(CBCharacteristic *)characteristic{
if (characteristic == self.commandNotifierCharacteristic){
// on envoie le message au delegate
if([[self delegate] respondsToSelector:@selector(iPhoneIsConnectedToIpad:)]) {
[[self delegate] iPhoneIsConnectedToIpad:NO];
}
}
}
编辑答案:
我发现了问题,在centralManager:didConnectPeripheral:
我没有使用[peripheral discoverServices:]
调用正确的服务UUID。谢谢你的帮助:)。
答案 0 :(得分:3)
我发现了问题,在centralManager:didConnectPeripheral:
我没有使用[peripheral discoverServices:]
调用正确的服务UUID。谢谢你的帮助:)。