我想要做什么
我正在尝试将我的应用程序连接到需要配对的蓝牙 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];
}
}
}