Программное сопряжение с устройством 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, но ответ там, похоже, не работает.

Ответы на вопрос(2)

Ваш ответ на вопрос