У меня есть рабочее приложение, использующее CoreBluetooth для связи между iPad (центральным) и iPhone (периферийным). У меня есть одна служба, которая имеет две характеристики. У меня есть Nexus 7, на котором установлена последняя версия Android 4.3 с поддержкой BTLE. Android немного опоздает, чтобы подскочить на BTW, но похоже, что они приближаются к нему аналогично тому, как работает iOS, где первоначально они поддерживают только центральную роль, когда периферийный режим выходит в более поздней версии. Я могу загрузить образец приложения Android BTLE и просматривать соседние периферийные устройства. С моей iPhone-рекламой в качестве периферии я могу увидеть значение из CBAdvertiseDataLocalNameKey в списке ближайших периферийных устройств на стороне Android. Я могу подключиться к iPhone, и символ Bluetooth превращается из светло-серого в черный, когда соединение выполнено. Соединение всегда длится ровно 10 секунд, а затем отключается. На стороне Android я должен увидеть список доступных сервисов и характеристик сразу после подключения. Я доказал, что код Android настроен правильно, потому что я могу подключить его к оборудованию TI CC2541DK-SENSOR, которое у меня есть, и все службы и характеристики указаны при подключении к нему.
Я провел последние несколько дней, чтобы устранить проблему без успеха. Проблема в том, что я не могу определить, какое устройство испытывает ошибку и, таким образом, вызывает отключение. Не существует обратных вызовов из CBPeripheralManagerDelegate во время фазы подключения или фазы обнаружения службы, поэтому я не знаю, в какой момент произошла ошибка (если ошибка на стороне iOS). На стороне Android вызывается метод, чтобы инициировать обнаружение службы, однако их обратный вызов "onServicesDiscovered" никогда не вызывается, что вызывает недоумение. Есть ли способ, которым я могу вникнуть в мужество связи BTLE на стороне iOS, чтобы узнать, что происходит и определить, какая ошибка происходит?