Незащищенное соединение Bluetooth в Android

Профессор предложил мне разработать небольшое демонстрационное приложение Bluetooth для Android. Я ничего не знал о разработке для Android до тех пор, пока две недели назад он не бросил мне этот вызов. Я также новичок в программировании на Java в целом, поэтому я начинаю издалека. Но все таки...

Итак, я прошел большую часть руководства, прочитал о Bluetooth в Android, посмотрел пример кода Bluetooth Chat и теперь пытаюсь сделать свое маленькое приложение. Итак, для демонстрации я попытаюсь установить соединение между моим реальным телефоном и мышью Bluetooth. Я хочу переместить фигуру на экране моего телефона в ответ на движение мыши.

Я сталкиваюсь со многими проблемами, но пока что моя основная проблема — открыть сокет незащищенной мышью. Когда я пытаюсь использовать метод listenUsingRfcommWithServiceRecord, он запрашивает UUID в качестве параметра. Но у моей мыши, скорее всего, нет UUID для ответа, поэтому я думаю, что этот метод не является хорошим.

Когда я читаю документацию об этом методе, там говорится, что для открытия незащищенного серверного сокета устройством вроде мыши я должен использовать метод listenUsingInsecureRfcommWithServiceRecord. Но этот метод недоступен, когда я его вызываю, он подчеркивается красным, и Eclipse говорит, что он не определен для типа BluetoothAdapter.

private BluetoothServerSocket connectDevice(BluetoothAdapter adapter, BluetoothDevice device){
    BluetoothServerSocket socket = null;
    try{
        socket = adapter.listenUsingInsecureRfcommWithServiceRecord(device.getName(), UUID.randomUUID());
    }
    catch(IOException e){
        Toast.makeText(this, "Connection failed.\n" + e.getMessage(), Toast.LENGTH_SHORT);
    }

    return socket;
}

Пожалуйста, не ругайте меня, если я делаю все неправильно, это мой первый вопрос здесь, и я начинаю с программирования на Java.


person AntoineG    schedule 09.04.2011    source источник
comment
хорошая борьба, ваш вопрос помог мне решить мою проблему с Bluetooth,   -  person Chatar Veer Suthar    schedule 26.07.2011


Ответы (3)


listenUsingInsecureRfcommWithServiceRecord()

Это доступно только на уровне API 10 и выше, т. е. на Android версии 2.3.3 и выше.

Это может быть проблемой, если вы собираете более раннюю версию.

См. правую часть серой полосы в документы

РЕДАКТИРОВАТЬ: В связи с тем, что расширение BluetoothAdapter невозможно, listenUsingInsecureRfcommWithServiceRecord() просто делает это...

return createNewRfcommSocketAndRecord(name, uuid, false, false);

Источник для createNewRfcommSocketAndRecord() (который является закрытым методом BluetoothAdapter) можно найти здесь...createNewRfcommSocketAndRecord

Не уверен, что поможет, но вы можете воспроизвести его функциональность.

person Squonk    schedule 09.04.2011
comment
Вы правы, я использую API уровня 7. Можно ли как-то подключиться к моей мыши с помощью безопасного соединения? Могу ли я отправить методу UUID.randomUUID() и надеяться, что он сработает? - person AntoineG; 09.04.2011
comment
@AntoineG: Боюсь, я никогда не пробовал программировать с помощью BlueTooth, поэтому не знаю, что можно сделать в этом случае. Я бы посоветовал посмотреть исходный код v2.3.3 BlutoothAdapter. Вы всегда можете попробовать определить свой собственный класс, который расширяет BluetoothAdapter, и добавить необходимый метод самостоятельно. - person Squonk; 09.04.2011
comment
@AntoineG: Извините, я только что понял, что BluetoothAdapter является «окончательным» и не может быть получен. Не уверен, что еще предложить. - person Squonk; 10.04.2011
comment
@AntoineG: См. РЕДАКТИРОВАТЬ в конце моего ответа. Надеюсь, поможет. - person Squonk; 10.04.2011
comment
Спасибо, это очень поможет! - person AntoineG; 11.04.2011
comment
@Squonk, если у вас есть какой-либо код для работы с незащищенным кодом, пожалуйста, прокомментируйте здесь, я прошу его, пожалуйста - person CoronaPintu; 04.07.2013

Если вы пытаетесь поговорить с коммерческой мышью, то использование API-интерфейсов сокетов SPP в Android не поможет. Мыши используют профиль HID Bluetooth, и для этого требуется, чтобы на телефоне была доступна роль хоста профиля HID. Стандартный выпуск Android в настоящее время не поддерживает HID, поэтому вам придется добавить его самостоятельно и собрать Android, интегрирующий HID из BlueZ и подключив его к вашему приложению.

person Dennis Mathews    schedule 10.04.2011

Для реализации поддержки профиля Bluetooth на Android существует проект под названием «Sybase-iAnywhere-Blue-SDK-for-Android», который заменяет версию Android и предоставляет все интерфейсы для базовых профилей и протоколов Bluetooth. Благодаря этому печать через Bluetooth с вашего телефона Android станет возможной с использованием профиля BPP, предоставленного этим SDK.

Дополнительные сведения см. по ссылкам ниже: ссылка 1: http://www.sybase.com/detail?id=1064424

Ссылка 2: http://www.sybase.com/products/allproductsa-z/mobiledevicesdks/bluetoothsdks

person Roy Samuel    schedule 26.05.2011