Akceptacja BluetoothServerSocket kończy się niepowodzeniem i zgłasza wyjątek IOException
Mam urządzenie, które obsługuje profil obiektów OBEX, profil ten opiera się na profilu portu szeregowego. Domyślam się, że mogę użyć przykładu Android Bluetooth Chat do podłączenia tego urządzenia do mojego telefonu z Androidem. Ale natknąłem się na problem dotyczącysocket.accept()
funkcjonalność w Android SDK. Staram się połączyć mój telefon z takim urządzeniem:
adapter = BluetoothAdapter.getDefaultAdapter();
device = adapter.getRemoteDevice("00:1B:DC:0F:EC:7E");
AcceptThread = new AcceptThread(true, adapter, device);
AcceptThread.start();
Konstruktor w AcceptThread jest zakodowany tak:
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;
}
Problem polega na tym, że próbuję zrobićconnect()
jak już mówiłem
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;
}
}
}
Jak widzisz, ServerSocket akceptuje każde połączenie przychodzące20 seconds
lub20000 ms.
Gdy czas się skończy, aplikacja wyśle wyjątek IOException w ten sposób
07-11 10:30:08.355: E/SIMPLECONNECT(1301): .run # accept() failed: java.io.IOException: Connection timed out
co mówi mi, że moje urządzenie nie mogło połączyć się z moim telefonem z Androidem. Urządzenie nie ma przycisku połączenia na wyświetlaczu, a jedynie funkcję wysyłania, która wyśle plik do mojego telefonu. Wierzę, że ta funkcja wysyłania również łączy się w tle, ale nie jestem pewien.
Czy ktoś może znaleźć dla mnie jakieś rozwiązania? Używam mojej aplikacji na aSamsung Galaxy SIII
zAndroid 4.0.4