Я пытаюсь подключить устройство Bluetooth с телефона Android.В большинстве случаев соединение успешно.Я делаю соединение через сокет, используя следующий код:
if (isUsingHtcTypeConnectionScheme) {
try {
if (LOG_ENABLED) Log.d(TAG,"connecting to SPP with createRfcommSocket");
Method m = mRemoteDevice.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
tmpSocket = (BluetoothSocket)m.invoke(mRemoteDevice, 1); // may be from 1 to 3
} catch (java.lang.NoSuchMethodException e){
Log.e(TAG, "java.lang.NoSuchMethodException!!!", e);
} catch ( java.lang.IllegalAccessException e ){
Log.e(TAG, "java.lang.IllegalAccessException!!!", e);
} catch ( java.lang.reflect.InvocationTargetException e ){
Log.e(TAG, "java.lang.InvocationTargetException!!!", e);
}
}
if (tmpSocket == null) {
try {
if (LOG_ENABLED) Log.d(TAG,"connecting to SPP with createRfcommSocketToServiceRecord");
tmpSocket = mRemoteDevice.createRfcommSocketToServiceRecord(uuid); // Get a BluetoothSocket for a connection with the given BluetoothDevice
} catch (IOException e) {
Log.e(TAG, "socket create failed", e);
}
}
mBtSocket = tmpSocket;
try {
mBtSocket.connect();
} catch (IOException e) {
connectionFailed();
setState(STATE_IDLE);
return;
}
И если Bluetooth на другом устройстве не включен, через 2-3 секунды он выдаст IOException, это нормальное поведение.
Но иногда соединение занимает 20-30 секунд и в конечном итоге не удается, и Bluetooth другого устройства включен.
Мне интересно, почему это происходит, если телефон не может подключиться к устройству, он должен выдать IOException через 2-3 секунды.Но сейчас требуется 20-30 секунд, чтобы бросить IOException.(И другое устройство на самом деле готово к подключению)
Я тестировал на нескольких телефонах Android и тоже имею эту проблему, поэтому может не относиться к конкретному телефону.Спасибо!