Bluetooth-соединение Android Безопасное Небезопасное

Я играл с API Bluetooth для Android 2.2 (уровень API 8, HTC Desire), и у меня было приложение, подключенное к встроенному устройству Bluetooth, используя:

device.createRfcommSocketToServiceRecord(DEV_UUID);

Это сгенерировало запрос на сопряжение, как и ожидалось, однако, чтобы упростить процесс подключения, я хотел избежать взаимодействия с пользователем при сопряжении, поэтому я перешел на уровень API 10 (HTC Desire с CyanogenMod 7), чтобы я мог использовать:

 device.createInsecureRfcommSocketToServiceRecord(DEV_UUID);

При тестировании это также работает так, как ожидалось (подключение без запроса пользователя на сопряжение), однако, когда я пытаюсь создать безопасный RfcommSocket под уровнем API 10, как и раньше с 2.2, я получаю исключение отказа в соединении ...

 java.io.IOException: Connection refused
    at android.bluetooth.BluetoothSocket.connectNative(Native Method)
    at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:204)

Насколько я могу судить, это должно работать точно так же, предлагая пользователю выполнить сопряжение?

РЕДАКТИРОВАТЬ:

Просто попробовал еще раз, используя следующий код, и результат тот же (работает для небезопасных, но не для безопасных), я попробую достать стандартное устройство 2.3 для тестирования.

        try {
            Method m = dev.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class } );
            BluetoothSocket bs = (BluetoothSocket)m.invoke(dev, devUUID);
            Log.d("TEST", "Method Invoked");
            bs.connect();
            Log.d("TEST", "Connected to socket");
            bs.close();
            Log.d("TEST", "Closed Socket");
        }

person DarkRyuu    schedule 26.11.2011    source источник
comment
Это может быть не связано, но вы это видели? stackoverflow.com/questions/3353080/   -  person Jack    schedule 27.11.2011
comment
Спасибо, Джек, проблемы, похоже, вызваны 2.1, так что, надеюсь, меня это не коснется, я попробую установить соединение с помощью отражения и посмотрю, поможет ли это.   -  person DarkRyuu    schedule 27.11.2011


Ответы (1)


Ища решение аналогичной проблемы в своем приложении, я нашел этот блог на code.google.com

Поможет всем тем, кто еще ищет решение этой проблемы на SO

http://mobisocial.stanford.edu/news/2011/03/bluetooth-reflection-and-legacy-nfc/ (ссылка больше не работает)

Теперь решение стало очень простым. Просто включите InsecureBluetooth.java в свой проект и измените 2 строки в BluetoothChatService.java.

tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord(mAdapter, NAME, MY_UUID, true);

и

tmp   = InsecureBluetooth.createRfcommSocketToServiceRecord(device, MY_UUID, true);

Вот и все !

person Sourab Sharma    schedule 28.12.2011
comment
Это хорошее решение, но можете ли вы объяснить, как используется UUID и в чем разница между mAdapter и устройством? Я прочитал статью о Bluetooth для разработчиков Android, но все еще не совсем понял. - person Argus9; 28.03.2013
comment
Я пробовал использовать tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord (mAdapter, NAME, MY_UUID, true); но выдает исключение mHandler .... Кто-нибудь знает, как это исправить - person Azerue; 09.01.2014
comment
Привет, @Sourab Sharma, похоже, что предоставленная вами ссылка сейчас недоступна, есть ли другой сайт, на котором мы могли бы получить код? или не могли бы вы прислать мне его копию, пожалуйста? Моя почта yttyhf2006 # gmail.com. Спасибо. - person YuDenzel; 08.02.2014
comment
Привет, @Sourab Sharma, у меня есть копия кода @ stanford.edu/~tpurtell/InsecureBluetooth .java. Все равно спасибо. Но я получил сообщение о проблеме «подключение: соединение не создано», когда я вызываю функцию подключения BluetoothSocket. - person YuDenzel; 08.02.2014