device.createInsecureRfcommSocketToServiceRecord не работает должным образом

Я загрузил образец проекта BluetoothChat здесь: https://android.googlesource.com/platform/development/+/master/samples/BluetoothChat?autodive=0%2F

Дело в том, что когда я запускаю приложение на двух устройствах (которые НЕ сопряжены), оно должно соединять два устройства БЕЗ запроса на сопряжение двух устройств, не так ли? И на самом деле, когда я пытаюсь подключить два устройства (которые НЕ сопряжены), он запрашивает сопряжение устройств. Я имею в виду, что в BluetoothChatService.java есть функция, которая должна создавать незащищенный сокет. Но кажется, что это не делает его работу?

   /**
    * This thread runs while attempting to make an outgoing connection
    * with a device. It runs straight through; the connection either
    * succeeds or fails.
    */
   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);
            }
        } catch (IOException e) {
            Log.e(TAG, "Socket Type: " + mSocketType + "create() failed", e);
        }
        mmSocket = tmp;
    }

Может кто-нибудь объяснить мне, почему он запрашивает сопряжение двух устройств? Метод createInsecureRfcommSocketToServiceRecord не должен запрашивать сопряжение неспаренных устройств, не так ли? х) Я действительно запутался.


person Ptit Sualty    schedule 19.01.2015    source источник
comment
Дубликат stackoverflow.com/questions/7537313/   -  person nilsi    schedule 06.03.2016


Ответы (1)


createInsecureRfcommSocketToServiceRecord() имеет "незащищенный" ключ, который устройства используют для связи, то есть ниже Bluetooth 2.1, не зашифрованный. Вот что такое "небезопасно".

Но это не меняет того факта, что если MAC-адреса еще нет в базе данных сопряжения, всегда будет подсказка.

Так что да, запрос появится.

person shkschneider    schedule 19.01.2015
comment
Ок, спасибо большое. Но нет ли способа не подсказывать? Я имею в виду, просто подключив два устройства. - person Ptit Sualty; 19.01.2015
comment
Не то чтобы я в курсе (пока не в паре). Опять же, АФАИК. - person shkschneider; 19.01.2015
comment
Если он запрашивает PIN-код, то какой PIN-код я должен ввести, потому что встроенное устройство не имеет возможности ввода PIN-кода. - person Gopal Singh Sirvi; 25.05.2017