Что я пытаюсь сделать
Я пытаюсь подключить свое приложение к устройству Bluetooth LE, которое необходимо подключить.
Текущее поведение
Нет проблем без сопряжения устройства и моего приложения для iPhone. Я могу без проблем подключать, переподключать и читать / писать характеристики.
Но если устройство необходимо связать, я могу читать / записывать характеристики только в первый раз, сразу после всплывающего подтверждения сопряжения. В следующий раз я обнаруживаю и подключаю приложение к своему устройству, но у меня нет прав на чтение / запись данных характеристик, потому что (я полагаю) я не использую информацию о сопряжении.
Наконец-то ...
После нескольких часов безуспешных поисков в Интернете, вот мои вопросы:
Как я могу подключить свое приложение к устройству Bluetooth LE из моего приложения iPhone, используя данные сопряжения, хранящиеся в моем телефоне? Я что-то упускаю?
Возможно ли, что это не проблема IOS, потому что, если в телефоне есть данные сопряжения для подключаемого устройства, они используются автоматически?
Есть ли кто-нибудь, у кого есть опыт работы с Bluetooth 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];
}
}
}