RFCOMM_CreateConnection – stato già aperto: 2, stato RFC: 4, stato MCB: 5

——– SOLVED ————– Sto scrivendo un'applicazione android che si connette a un dispositivo tramite bluetooth utilizzando RFCOMM. Utilizzo l'esempio BluetoothChat come base per stabilire una connessione e tutto funziona perfettamente per la maggior parte del tempo. A volte non riesco a riconnettersi a causa di un messaggio che la socket è già aperta: RFCOMM_CreateConnection – stato già aperto: 2, stato RFC: 4, stato MCB: 5 Ciò accade se si connette al dispositivo, chiudere l'applicazione (call onDestroy )), riaprire e cercare nuovamente di riconnettere, che ne risulta.

Utilizzo questo metodo per il collegamento nell'esempio ConnectThread (esempio ref.BluetoothChat): Metodo m = device.getClass () getMethod ("createRfcommSocket", nuova class [] {int.class}); tmp = (BluetoothSocket) m.invoke (dispositivo, Integer.valueOf (1));
mmSocket = tmp;

  • Dispositivi supportti 0 sul gioco di Google
  • Animazione di transizione diapositive in un ActivityGroup su Android
  • Mostra la tastiera morbida per la window di dialogo
  • Librerie di filter delle immagini Android
  • Elenco di liste espandibile con elementi figlio a radice
  • Passaggio di variables da ViewModel a un'altra visualizzazione (MVVMCross)
  • L'unica cosa che risolve questo è spegnere / sul bluetooth del telefono Android. Questo mi port a credere che la presa non sia chiusa su onDestroy (), ma sono ancora chiamata a chiudere tutti i thread come mostrato nell'esempio precedente. Tutte le idee sarebbero appriciate.

  • Come aggiungere gridview setOnItemClickListener
  • Codifica dei messaggi SMS in Android
  • Posizionando il mio ActionBar in basso
  • La tastiera non visualizzata quando viene triggersta l'attività
  • come submit string da Android a PC su wifi
  • Come ordinare l'arrays di oggetti json in java
  • One Solution collect form web for “RFCOMM_CreateConnection – stato già aperto: 2, stato RFC: 4, stato MCB: 5”

    Mi sono imbattuto anche su questo, e qui è la risposta che ho trovato:

    Questo errore può verificarsi se si apre e chiude più volte una connessione socket bluetooth.

    Soluzione

    A partire dal livello API 14 esiste un metodo in BluetoothSocket denominato isConected () , che restituisce true, se questo socket è già connesso e false altrimenti, qui l'estratto originale dell'API:

    Ottieni lo stato di connessione di questa socket, cioè se esiste una connessione triggers con il dispositivo remoto.

    Per i livelli API <14 è ansible risolvere questo problema mettendo la tua discussione di gestione Bluetooth dopo la chiusura della connessione – dovrebbe essere sufficiente 1000 ms, ecco un esempio (btDevice è del tipo BluetoothDevice ed è stato inizializzato prima dello snippet di codice sotto):

    try { //Open the socket to an SPP device (UUID taken from Android API for createRfcommSocketToServiceRecord) BluetoothSocket btSocket = btDevice.createRfcommSocketToServiceRecord("00001101-0000-1000-8000-00805F9B34FB"); //Connect to the socket btSocket.connect(); //Close the socket btSocket.close(); //Sleep time of 1000ms after closing the socket SystemClock.sleep(POST_RESET_DELAY); } catch (Throwable e) { // Log error message } 

    Ps Invece di SystemClock.sleep è ansible anche utilizzare Thread.sleep – tuttavia il sonno di SystemCock non può essere interrotto, mentre Thread.sleep può essere interrotto, quindi dipende dal tuo caso d'uso che opzione meglio si adatta al tuo scopo.

    Fonte: Louis A. Prado

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.