Qualcuno ha un esempio operativo completo di come associare a livello di codice un dispositivo BLE (non Bluetooth Classic) che utilizza la passkey entry (ovvero un PIN a 6 cifre) o Numeric Confronto su Android 4.4 o successivo? Con "programmaticamente" intendo che dico a Android il PIN: l'utente non viene richiesto.Abbinamento a livello di codice con un dispositivo BLE su Android 4.4+
ci sono molte domande simili su questo su SO, ma sono sia a) su Bluetooth Classic, b) vecchio (prima setPin()
e createBond()
erano pubblico), oppure c) senza risposta.
La mia comprensione è la seguente.
- È possibile connettersi al dispositivo e scoprirne i servizi.
- Si tenta di leggere una caratteristica 'protetta'.
- Il dispositivo restituisce un errore di autenticazione.
- Android avvia in qualche modo l'accoppiamento e gli dici il PIN.
- Ora è possibile leggere la caratteristica.
Ho creato un dispositivo utilizzando mBed in esecuzione su nRF51-DK e gli ho assegnato una singola caratteristica.
ho istituito i parametri di sicurezza in questo modo:
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
E poi nel caratteristico ho usato
requireSecurity(SecurityManager::SECURITY_MODE_ENCRYPTION_WITH_MITM);
Ora, quando provo a leggere con il Nordic Master Control Panel, ottengo una richiesta di accoppiamento notifica in questo modo:
E posso inserire questo PIN, e poi MCP dice che sono incollato e posso leggere la caratteristica.
Tuttavia, nella mia app vorrei evitare che l'utente inserisca il PIN, poiché lo conosco già. Qualcuno ha un esempio recente completo di come farlo?
Modifica: A proposito, this è la domanda più pertinente che ho trovato su SO, ma la risposta non sembra funzionare.
L'SDK di Android consente l'accoppiamento senza che all'utente venga notificato/chiesto conferma? Sembra che tu non sia in grado di ... –
Sì, sì. Ha un metodo 'setPin()' appositamente per questo, e ho avuto modo di lavorare, tranne la notifica "Pairing request" è ancora mostrata. – Timmmm
Non sono sicuro se questo aiuto è andato, ma vale la pena leggerlo http://stackoverflow.com/questions/17971834/android-prevent-bluetooth-pairing-dialog –