КАК подключить Bluetooth на двух устройствах с помощью NFC

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

Одним из них является 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);
        }
    }
}

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


person user1111176    schedule 22.12.2011    source источник
comment
Здравствуйте, мне нужно, чтобы тот же функционал был разработан. Пожалуйста, предложите мне, как вы соединяете устройства, когда они приближаются и начинают передавать сообщения NDEF. Пожалуйста ответьте мне. Это срочно Пожалуйста.   -  person Sanat Pandey    schedule 20.04.2012


Ответы (1)


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

person jlvaquero    schedule 22.12.2011
comment
Спасибо за ваш ответ .. но я использую команду tmp = device.createInsecureRfcommSocketToServiceRecord (MY_UUID_INSECURE); и в пояснении к команде говорится, что она продолжит и установит соединение в обход требуемой ссылки шифрования. - person user1111176; 22.12.2011
comment
Уверены ли вы? Мой ответ был скопирован из объяснения онлайн-документации. Проверьте еще раз, пожалуйста. - person jlvaquero; 22.12.2011