Программное сопряжение с устройством BLE на Android 4.4+
У кого-нибудь есть полный рабочий пример того, как программно соединиться с BLE (не Bluetooth Classic) устройство, которое использует ввод пароля (то есть 6-значный PIN-код) или Числовое сравнение на Android 4.4 или более поздней версии? Под «программно» я подразумеваю, что я сообщаю Android PIN-код - пользователь не запрашивается.
Есть много похожих вопросов об этом на SO, но они либо: а) о Bluetooth Classic, б) старые (доsetPin()
а такжеcreateBond()
были публичными) или в) без ответа.
Мое понимание таково.
Вы подключаетесь к устройству и обнаруживаете его услуги.Вы пытаетесь прочитать «защищенную» характеристику.Устройство возвращает ошибку аутентификации.Android как-то инициирует сопряжение, и вы сообщаете ему PIN-код.Теперь вы можете прочитать характеристику.Я создал устройство, используяmBed работает наnRF51-DK и дал ему одну характеристику.
Я установил параметры безопасности следующим образом:
ble.securityManager().init(
true, // Enable bonding (though I don't really need this)
true, // Require MitM protection. I assume you don't get a PIN prompt without this, though I'm not 100% sure.
SecurityManager::IO_CAPS_DISPLAY_ONLY, // This makes it us the Passkey Entry (PIN) pairing method.
"123456"); // Static PIN
А потом в характеристике я использовал
requireSecurity(SecurityManager::SECURITY_MODE_ENCRYPTION_WITH_MITM);
Теперь, когда я пытаюсь прочитать это сNordic Master Панель управленияЯ получаю уведомление о запросе на сопряжение, например:
И я могу вставить этот PIN-код, и тогда MCP говорит, что я связан, и могу прочитать характеристику.
Однако в моем приложении я бы не хотел, чтобы пользователь вводил PIN-код, поскольку я его уже знаю. У кого-нибудь есть полный недавний пример того, как это сделать?
редактировать: Кстатиэтот это самый актуальный вопрос, который я нашел на SO, но ответ там, похоже, не работает.