BluetoothServerSocket принимает сбой и выдает IOException
У меня есть устройство, которое поддерживает OBEX Object Push Profile, этот профиль основан на профиле последовательного порта. Я предполагаю, что я могу использовать пример Android Bluetooth Chat для подключения этого устройства к моему телефону Android. Но я столкнулся с проблемой, касающейсяsocket.accept()
функциональность в андроид SDK. Я пытаюсь подключить телефон к этому устройству следующим образом:
adapter = BluetoothAdapter.getDefaultAdapter();
device = adapter.getRemoteDevice("00:1B:DC:0F:EC:7E");
AcceptThread = new AcceptThread(true, adapter, device);
AcceptThread.start();
Конструктор в AcceptThread кодируется так:
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;
}
Проблема в том, когда я пытаюсь сделатьconnect()
как я сказал ранее
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;
}
}
}
Как вы можете видеть, ServerSocket принимает каждое входящее соединение для20 seconds
или же20000 ms.
Когда время истечет, приложение выдаст IOException, как это
07-11 10:30:08.355: E/SIMPLECONNECT(1301): .run # accept() failed: java.io.IOException: Connection timed out
который говорит мне, что мое устройство не может подключиться к моему телефону Android. Устройство не имеет кнопки подключения на дисплее, просто функция отправки, которая отправит файл на мой телефон. Я считаю, что эта функция отправки также делает подключение в фоновом режиме, но я не уверен.
Кто-нибудь может определить какие-либо решения для меня? Я запускаю свое приложение наSamsung Galaxy SIII
сAndroid 4.0.4