Programmgesteuertes Pairing mit einem BLE-Gerät unter Android 4.4 +

Hat jemand ein komplettes Arbeitsbeispiel, wie man programmatisch mit einer BLE koppelt nich Bluetooth Classic) Gerät, das die Kennworteingabe (d. H. Eine 6-stellige PIN) oder den numerischen Vergleich unter Android 4.4 oder höher verwendet? Mit "programmgesteuert" meine ich, ich sage Android die PIN - der Benutzer wird nicht dazu aufgefordert.

Es gibt viele ähnliche Fragen zu SO, aber sie sind entweder a) zu Bluetooth Classic, b) alt (vorsetPin() undcreateBond() waren öffentlich) oder c) unbeantwortet.

ein Verständnis ist wie folg

Sie stellen eine Verbindung zum Gerät her und ermitteln dessen Dienste. Sie versuchen, ein 'geschütztes' Merkmal zu lesen.Das Gerät gibt einen Authentifizierungsfehler zurück.Android initiiert irgendwie das Pairing und Sie teilen ihm die PIN mit.Sie können jetzt das Merkmal ablesen.

Ich habe ein Gerät mit @ erstel mBed Laufen auf dem nRF51-DK und ihm ein einzelnes Merkmal gegeben.

Ich richte die Sicherheitsparameter folgendermaßen ein:

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

Und dann in dem Merkmal, das ich verwendet habe

requireSecurity(SecurityManager::SECURITY_MODE_ENCRYPTION_WITH_MITM);

Nun, wenn ich versuche, es mit dem @ zu lesNordic Master Control Panel, Ich erhalte eine Benachrichtigung über eine Pairing-Anfrage wie folgt:

Und ich kann diese PIN eingeben, und dann sagt MCP, dass ich gebunden bin, und kann das Merkmal lesen.

In meiner App möchte ich jedoch vermeiden, dass der Benutzer die PIN eingibt, da ich sie bereits kenne. Hat jemand ein vollständiges aktuelles Beispiel dafür?

Bearbeite: AproposDie ist die relevanteste Frage, die ich bei SO gefunden habe, aber die Antwort dort scheint nicht zu funktionieren.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage