КАК подключить Bluetooth в двух устройствах с помощью NFC - PullRequest
2 голосов
/ 22 декабря 2011

Я пытаюсь соединить два устройства

Одним из них является Google Nexus S, на котором запущено приложение, которое считывает MAC-адрес, записанный поверх тега, который привязан к другому телефону, отличному от Android.

Теперь я пытаюсь соединить устройства, когда я нажимаю на другой телефон, мое приложение считывает MAC-адрес, сохраненный в TAG, и автоматически создает соединение Bluetooth.

Все работает нормально, но яполучение запроса на сопряжение или сопоставление ключей на обоих телефонах, которые не должны приходить.

Вот сегмент Bluetooth, где происходит соединение

private class ConnectThread extends Thread {
    private final BluetoothSocket mmSocket;
    private final BluetoothDevice mmDevice;
    private String mSocketType;

    public ConnectThread(BluetoothDevice device, boolean secure) {
        mmDevice = device;
        BluetoothSocket tmp = null;
        mSocketType = secure ? "Secure" : "Insecure";

        // Get a BluetoothSocket for a connection with the
        // given BluetoothDevice
        try {
            if (secure) {
                tmp = device.createRfcommSocketToServiceRecord(
                        MY_UUID_SECURE);
            } else {
                tmp = device.createInsecureRfcommSocketToServiceRecord(
                        MY_UUID_INSECURE);

                Log.d("CHECK", "Sucessfully created insecure socket");
            }
        } catch (IOException e) {
            Log.e(TAG, "Socket Type: " + mSocketType + "create() failed", e);
        }

        mmSocket = tmp;

    }

    public void run() {
        Log.i(TAG, "BEGIN mConnectThread SocketType:" + mSocketType);
        setName("ConnectThread" + mSocketType);

        // Always cancel discovery because it will slow down a connection
        mAdapter.cancelDiscovery();

        Log.d("CHECK", "Inside RUN");

        // Make a connection to the BluetoothSocket
        try {
            // This is a blocking call and will only return on a
            // successful connection or an exception

            Log.d("CHECK", "Trying to connect");

            mmSocket.connect();

            Log.d("CHECK", "Tried to connect");

        } catch (IOException e) {
            // Close the socket
            try {
                mmSocket.close();

                Log.d("CHECK", "Socket closed");

            } catch (IOException e2) {
                Log.e(TAG, "unable to close() " + mSocketType +
                        " socket during connection failure", e2);
            }

            Log.d("CHECK", "Connection failed");

            connectionFailed();
            return;
        }

        // Reset the ConnectThread because we're done
        synchronized (BluetoothChatService.this) {
            mConnectThread = null;
        }

        // Start the connected thread
        connected(mmSocket, mmDevice, mSocketType);

        Log.d("CHECK RESULT", "Sucessfully connected");

       // Toast.makeText(BluetoothChatService.ConnectThread.this, "Sucessfully connected" , Toast.LENGTH_LONG).show();
    }

    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) {
            Log.e(TAG, "close() of connect " + mSocketType + " socket failed", e);
        }
    }
}

Я пытаюсь установить небезопасное соединение, но я не знаю, почему он запрашивает ключи сопряжения в обоих телефонах.

1 Ответ

1 голос
/ 22 декабря 2011

Проверьте вашу версию Bluetooth, потому что: (sic) "Для устройств Bluetooth 2.1 ключ связи будет зашифрован, поскольку шифрование обязательно . Для устаревших устройств (до устройств Bluetooth 2.1) ключ связи будетне быть зашифрованным. "

...