Соединение через Bluetooth-разъем Android занимает слишком много времени и в итоге не удалось - PullRequest
5 голосов
/ 26 февраля 2012

Я пытаюсь подключить устройство 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 и тоже имею эту проблему, поэтому может не относиться к конкретному телефону.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...