У меня есть принимающий поток, прослушивающий вызов BluetoothServerSocket accept (). Этот поток будет убит и перезапущен другим потоком довольно часто. Когда он получает сигнал уничтожения, он закрывает BluetoothServerSocket, вызывая IOException в accept (), и выходит из бесконечного цикла. Но иногда во время этих запусков и перезапусков вызов listenUsingRfcommWithServiceRecord () перехватывает IOException «неверный номер файла» и преждевременно завершает цикл. Я думаю, что я не могу корректно завершить работу компонента BT в kill (?), Но пока ничего не понял ... Может кто-нибудь дать мне несколько советов?
private class ReceiveThread extends Thread {
private final static String TAG = "ReceiveThread";
private BluetoothServerSocket mmBtServer;
private BluetoothSocket mmBtSocket;
public ReceiveThread() {
setName(TAG);
}
public void run() {
if(D) Log.d(TAG,"RceiveThread running");
while(true) {
try {
SetState(SERVICE_STATE.LISTENING);
mmBtServer = mBtAdapter.listenUsingRfcommWithServiceRecord(mAppName, mUUID);
if(D) Log.d(TAG,"ReceiveThd accepting connection");
mmBtSocket = mmBtServer.accept();
// Close server once socket establishes
mmBtServer.close();
if(D) Log.d(TAG, "Connection Established");
SetState(SERVICE_STATE.CONNECTED_BUSY);
/** Handle Processing **/
// Close socket
mmBtSocket.close();
} catch (IOException e) {
SetState(SERVICE_STATE.NOT_CONNECTED);
Log.d(TAG,"IOException in ReceiveThread", e);
break;
}
SetState(SERVICE_STATE.CONNECTED_IDLE);
}
}
public void kill() {
try {
if(mmBtSocket!=null) mmBtSocket.close();
if(mmBtServer!=null) mmBtServer.close();
} catch (IOException e) {
Log.d(TAG,"Failure killing ReceiveThread", e);
}
SetState(SERVICE_STATE.NOT_CONNECTED);
}
}