我想做什么
我试图将我的应用程序连接到需要配对的蓝牙LE设备。
当前行为
没有配对设备和我的iPhone应用程序没有问题。我能够连接,重新连接并读取/写入特征而没有任何问题。
但是,如果设备需要配对,我只能在第一次进行配对弹出确认后读取/写入特征。下一次,尽管我已经发现并连接了应用程序到我的设备,但我没有权限读取/写入特征数据,因为(我猜)我没有使用配对信息。
最后...
在花费几个小时在网络上搜索无果后,这里有我的问题:
怎样可以从我的iPhone应用程序中使用存储在手机中的配对数据来连接蓝牙LE设备?我错过了什么吗?
是否可能不是IOS的问题,因为如果配对数据存在于连接的设备中,则会自动使用它?
有没有具有蓝牙LE和IOS经验的人可以帮助我?
更新2013-10-27
我发现如果存在配对鉴权,就无法在发现特征时立即读取受保护的特征(没有确认弹出窗口)。非受保护的特征没有问题!我不知道为什么会发生这种情况,但是行为是IOS应用程序从未收到来自设备的答案。
因此,如果第一次阅读是在之后进行的,则不会引起问题。这里是我用于发现具有数据读取注释的特征的代码。
- (void) peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error;
{
NSArray *characteristics = [service characteristics];
CBCharacteristic *characteristic;
if (peripheral != servicePeripheral) {
NSLog(@"Wrong Peripheral.\n");
return ;
}
if (service != batteryService) {
NSLog(@"Wrong Service.\n");
return ;
}
if (error != nil) {
NSLog(@"Error %@\n", error);
return ;
}
for (characteristic in characteristics) {
NSLog(@"discovered characteristic %@", [characteristic UUID]);
if ([[characteristic UUID] isEqual:[CBUUID UUIDWithString:kBatteryCharacteristicUUIDString]]) { // Bat
NSLog(@"Discovered Bat Characteristic");
batteryCharacteristic = [characteristic retain];
//--> generate problem when pairing exists between IOS app and device
//[peripheral readValueForCharacteristic:batteryCharacteristic];
}
}
}