Не работает сопряжение Android - «сброс соединения по пиру» - PullRequest
0 голосов
/ 28 января 2012

Как видно из названия, мне трудно посылать некоторые данные через Bluetooth на мой компьютер. Я пытаюсь установить соединение с моим телефоном Android в качестве клиента и моим ПК в качестве сервера. Когда я пытаюсь установить соединение через BluetoothSocket.connect (), мой телефон запрашивает пин-код. После входа в него мой компьютер также запрашивает тот же вывод, но перед тем, как я могу его ввести, метод connect () вызывает исключение IOException. Я предполагаю, что метод connect () - истекает, прежде чем я могу ввести правильный пин-код на моем ПК, но как я могу заставить его ждать достаточно долго, чтобы я мог ввести PIN-код?

РЕДАКТИРОВАТЬ: после повторного сопряжения ПК с моим телефоном это работало, потому что диалоговое окно сопряжения больше не появляется в моем приложении. Если я отсоединяю компьютер от компьютера и запускаю свое приложение, диалоговое окно сопряжения появляется, но исчезает через несколько секунд, и сокет выдает исключение («сброс соединения по пиру»). Видимо, соединение сбрасывается до того, как будет выполнено сопряжение, но почему?

Вот мой код:

private void connectToDevice(BluetoothDevice device)
{
    mBluetoothAdapter.cancelDiscovery();
    BluetoothSocket socket = null;
    try 
    {
        socket = device.createRfcommSocketToServiceRecord(UUID.fromString("00001101-                        0000-  1000-8000-00805F9B34FB"));
    } 
    catch (IOException e) 
    {
        Log.e("HeliRemote", "Couldn't get socket.");
        return;
    }
    try 
    {
        socket.connect();
    } 
    catch (IOException e) 
    {
        try 
        {
            socket.close();
        } 
        catch (IOException e1) 
        {   
            Log.e("HeliRemote", "Couldn't close connection");
        }
        // That's the message I get in LogCat
        Log.e("HeliRemote", "Couldn't connect to Socket.");
        return;
    }

    Log.i("HeliRemote", "connected.");
}

Я был бы рад, если бы кто-нибудь дал мне несколько хороших советов относительно этой проблемы.

1 Ответ

1 голос
/ 26 апреля 2012
    Method m = mBluetoothDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
        mBluetoothSocket = (BluetoothSocket) m.invoke(mBluetoothDevice, 1);


       // mBluetoothSocket = mBluetoothDevice.createRfcommSocketToServiceRecord(applicationUUID);
        mBluetoothAdapter.cancelDiscovery();

        mBluetoothSocket.connect();





    }
    catch (IOException eConnectException) 
    {
        Log.d(TAG, "CouldNotConnectToSocket", eConnectException);
         closeSocket(mBluetoothSocket);
         return;
    } catch (SecurityException e) {

        Log.d(TAG, "CouldNotConnectToSocket", e);
        closeSocket(mBluetoothSocket);
    } catch (NoSuchMethodException e) {

        Log.d(TAG, "CouldNotConnectToSocket", e);
        closeSocket(mBluetoothSocket);
    } catch (IllegalArgumentException e) {
        Log.d(TAG, "CouldNotConnectToSocket", e);
        closeSocket(mBluetoothSocket);
    } catch (IllegalAccessException e) {
        Log.d(TAG, "CouldNotConnectToSocket", e);
        closeSocket(mBluetoothSocket);
    } catch (InvocationTargetException e) {
        Log.d(TAG, "CouldNotConnectToSocket", e);
        closeSocket(mBluetoothSocket);
    }
}

попробуйте это ...

...