Ho problemi a collegare due dispositivi Android tramite Bluetooth, che si verificano solo quando sono stati abbinati in precedenza. Ne sto eseguendo uno come server e l'altro come client.Android Bluetooth accept()/connect() con dispositivi già accoppiati
Ecco la sequenza di cose sul lato server:
- controllare vari stati Bluetooth (adattatore disponibile, è abilitata, ecc).
- call listenUsingRfcommWithServiceRecord() con un UUID predefinito che ho scelto.
- richiesta di rendere rilevabile il dispositivo
- da quando è rilevabile avviene in modo asincrono, chiamo accept() e attendo una connessione in ingresso.
Sul lato client:
- Controlla i vari stati Bluetooth (adattatore disponibile, è abilitata, ecc).
- per ogni dispositivo in getBondedDevices(), confronto getName() con il nome del server. Se c'è una corrispondenza, passare al punto 6. scoperta
- Inizio BT
- Per ogni dispositivo rilevato (nota che abbinato dispositivi da 2 bis non si presentano qui), confrontare il nome del dispositivo con il nome del server. Se c'è una corrispondenza, passare al punto 6.
- Annulla scoperta
- Sul dispositivo che è stato trovato dal punto 2, chiamare createRfcommSocketToServiceRecord() con lo stesso UUID predefinito che è stato utilizzato sul lato server.
- Chiama connect() e attendi che ritorni un socket collegato.
Il processo sopra riportato funziona perfettamente per me quando il client e il server non sono mai stati abbinati in precedenza. Tuttavia, dopo che Android li ha registrati nell'elenco dei dispositivi, scadranno inevitabilmente nella fase connect()/accept().
Sono stato alla ricerca di una soluzione per un paio di giorni e ho provato un paio di cose abbastanza compreso questo: Connecting to a already paired Bluetooth device
metodo La riflessione non funziona per me. Sembra che connect() restituisca immediatamente ma quando ho provato a getOutputStream() ottengo un'eccezione. Sul lato accept() non registra nemmeno che qualcuno ha provato a connettersi. Ho seriamente bisogno di aiuto o puntatore per far sì che i dispositivi stabiliscano una connessione una volta che sono stati abbinati in precedenza.
Ecco alcune informazioni sui dispositivi:
- sto testando il server e client su due telefoni LG G2X.
- Entrambi funzionano su Android 2.3.3, che corrisponde al livello API 10.
- Anche in questo caso, quanto sopra funziona dopo aver disaccoppiato manualmente i dispositivi nelle impostazioni.
Grazie in anticipo. Ho circa 2 settimane di vita in Android e Bluetooth, quindi se vedi passaggi mancanti o best practice, ti preghiamo di indicarli.
getRemoteDevice non è un metodo statico, come si sta chiamando è – raja
È sempre (quasi?) Vuole utilizzare BluetoothAdapter.getDefaultAdapter() come BluetoothAdapter. Quanto sopra è solo pseudocodice, quindi non puoi semplicemente copiare e incollare. –
Ottimo post, questo in realtà ha senso perché il dispositivo è un riferimento e sarà obsoleto. L'adattatore sarà sempre aggiornato. – Cookster