La aceptación de BluetoothServerSocket falla y lanza una IOException
Tengo un dispositivo que admite el perfil de inserción de objetos OBEX, este perfil se basa en el perfil de puerto serie. Supongo que puedo usar el ejemplo del chat de Bluetooth para Android para conectar este dispositivo a mi teléfono Android. Pero me encontré con un problema, en relación con elsocket.accept()
Funcionalidad en el SDK de Android. Intento lograr conectar mi teléfono con este dispositivo de esta manera:
adapter = BluetoothAdapter.getDefaultAdapter();
device = adapter.getRemoteDevice("00:1B:DC:0F:EC:7E");
AcceptThread = new AcceptThread(true, adapter, device);
AcceptThread.start();
El constructor en AcceptThread está codificado así:
public AcceptThread(boolean secure, BluetoothAdapter adapter, BluetoothDevice device) {
BluetoothServerSocket tmp = null;
this.adapter = adapter;
this.device = device;
// Create a new listening server socket
try {
tmp = adapter.listenUsingInsecureRfcommWithServiceRecord(device.getName(), UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
} catch (Exception e) {
Log.e(TAG, ".AcceptThread # listen() failed", e);
}
mmServerSocket = tmp;
}
El problema es cuando trato de hacer unconnect()
Como dije antes
public void run() {
BluetoothSocket socket = null;
// Listen to the server socket if we're not connected
while (mState != STATE_CONNECTED) {
try {
// This is a blocking call and will only return on a
// successful connection or an exception
Log.d(TAG, "AcceptThread.run: accepting server socket connection");
socket = mmServerSocket.accept(20000);
Log.d(TAG, ".AcceptThread.run # server socket connection accepted");
} catch (Exception e) {
Log.e(TAG, ".run # accept() failed: "+e);
break;
}
}
}
Como puede ver, ServerSocket acepta todas las conexiones entrantes para20 seconds
o20000 ms.
Cuando se acabe el tiempo, la aplicación lanzará una IOException como esta
07-11 10:30:08.355: E/SIMPLECONNECT(1301): .run # accept() failed: java.io.IOException: Connection timed out
lo que me dice que mi dispositivo no pudo conectarse a mi teléfono Android. El dispositivo no tiene un botón de conexión en la pantalla, solo una función de envío que enviará un archivo a mi teléfono. Creo que esta funcionalidad de envío también hace una conexión en segundo plano, pero no estoy seguro.
¿Alguien puede señalar alguna solución para mí? Estoy ejecutando mi aplicación en unSamsung Galaxy SIII
conAndroid 4.0.4