Ho lavorato a un'app bluetooth per Android per un po 'di tempo e ho appena scoperto questo problema. Quando preformo mySocket.connect();
nella mia classe di servizio bluetooth, occasionalmente blocca indefinitamente. Ho letto la documentazione per BluetoothSocket.close()
e dice:Bluetooth su Android: i miei blocchi Socket.connect() per sempre e Socket.close non sblocca
Chiudere immediatamente questo socket e rilasciare tutte le risorse associate.
Le chiamate bloccate su questo socket in altri thread immediatamente generano un IOException.
Tuttavia, questo non sembra funzionare per me. Ecco il mio codice per impostare un timer e poi provare a connetterti.
//code for starting timer and connecting
MyRunnable runner = new MyRunnable(mySocket);
Thread countThread = new Thread(runner);
countThread.start();
mySocket.connect();
runner.setSocketConnected();
//code for MyRunnable
private class MyRunnable implements Runnable{
private boolean didSocketConnect = false;
private boolean socketConnectFailed = false;
private BluetoothSocket socket;
public MyRunnable(BluetoothSocket socket){
this.socket = socket;
}
public void run() {
long start = System.currentTimeMillis();
while(ESTABLISH_TIMEOUT + start >= System.currentTimeMillis() && !didSocketConnect && !socketConnectFailed){
}
if(!didSocketConnect && !socketConnectFailed){
Log.v(TAG,"Reached Timeout and socket not open. Look for #");
try {
socket.close();
Log.v(TAG,"#THIS CALL SHOULD BE MADE AFTER REACHED TIMEOUT AND SOCKET NOT OPEN");
} catch (IOException e) {
Log.v(TAG,"Closing the socket connection fail--", e);
}
}else{
Log.v(TAG, "Connected or Failed Before Timeout Thread Hit");
}
}
public void setSocketConnected(){
didSocketConnect = true;
}
public void setSocketFailed(){
socketConnectFailed= true;
}
}
Quando chiamo stretti(), si blocca anche a tempo indeterminato e la connect() chiamata non genera un IOException, nonostante la documentazione BluetoothSocket.close(). Qual è il modo migliore per farlo funzionare in modo che connect() e close() non si blocchino indefinitamente?
NOTA: sto utilizzando Android 2.2 per questo progetto.
Hai mai trovato la causa/soluzione a questo problema? Sto incontrando la stessa cosa, ma sto usando due thread, un thread connect e un altro che chiama close(). –
Ho lo stesso problema qui. Le chiamate al Mainthread si chiudono e non ritornano mai, ma non sempre, a volte funziona, a volte non lo fa. – NikkyD