Android Bluetooth RFCOMM подключиться слишком медленно
Я создаю небезопасное соединение rfcomm от моего HTC One X к последовательному модулю Bluetooth ESD110 SENA с этим кодом:
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(addr);
BluetoothSocket socket = null;
try{
socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString(SERVICE_UUID));
mBluetoothAdapter.cancelDiscovery();
socket.connect();
sendMessage(socket,"working!");
socket.close();
Суть в том, чтобы подключиться к модулю с автоматическим анализом, и все это работает, но для установления соединения требуется около 15 секунд.
Отладка остается на:
socket.connect();
в течение 15 секунд и только после этого - подключение и передача строки в модуль (для этого требуется 1 секунда).
Возможно ли, что телефон обрабатывает некоторые другие данные (обнаружение служб и т. Д.) Перед подключением к MAC-адресу и как я могу сделать так, чтобы он подключался быстрее? Или это может быть проблема с аппаратным обеспечением HTC?
2 ответа
РЕДАКТИРОВАТЬ, если медленное обнаружение службы является вашей проблемой, вы можете попытаться избежать этого, пропустив все обнаружение службы напрямую, используя Reflection для метода createRfcommSocket - я делаю это по другим причинам в моих проектах, связанных с BT-SPP, - это выглядит так:
BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice bd = bta.getRemoteDevice(mac);
Method m = bd.getClass().getMethod("createRfcommSocket",new Class[] { int.class });
bt_connection = (BluetoothSocket) m.invoke(bd, Integer.valueOf(1));
Предварительный комментарий: вам нужно сканировать все время? Если у вас есть возможность запомнить Mac, вы можете подключиться быстрее. Долгое время ожидания imho происходит из-за обнаружения - вы можете подключиться, только если это действительно закончено (не сделано напрямую после mBluetoothAdapter.cancelDiscovery();) - и это может занять некоторое время..
Это быстрее во второй раз? Поиск телефона в первый раз (до того, как на вашем устройстве будет установлено время целевого устройства) занимает некоторое время.
Однако, даже если он должен найти цель, это не должно занять 15 секунд.
Возможно, вы столкнулись с этой ошибкой: http://code.google.com/p/android/issues/detail?id=29039
Обратите внимание, что есть одна ситуация, в которой создание соединения работает, но занимает гораздо больше времени, чем обычно.