Приложение Bluez, запущенное на ПК для прослушивания устройства Android

1

Я хочу разработать приложение, использующее Linux Bluetooth API Bluez, позволяя Android-устройству отправлять и получать данные.

Для ПК я рассмотрел этот код: http://people.csail.mit.edu/albert/bluez-intro/x502.html, потому что Android использует протокол RFCOMM, или я предполагаю, что поскольку невозможно вручную установить протокол,

Поскольку в Android можно использовать Java API (Bluez API заблокирован), а SDP не работает очень хорошо, я должен использовать этот вызов:

InsecureBluetooth.createRfcommSocket(BlueDevice , Channel , false);

Когда я устанавливаю канал, например, на 0xC (12), который является одним из каналов, возвращаемых командой:

sdptool browse local | grep Channel

приложение Android может правильно подключаться к ПК.

Проблема в том, что я не могу понять, каков параметр, позволяющий двум приложениям обмениваться данными. На стороне ПК у меня есть только номер порта со значением 1. На стороне Android у меня есть канал, который назначается службе, доступной SDP. Но SDP не работает в Android, так как я могу это сделать?

Любая помощь приветствуется. благодаря

Теги:
bluetooth
bluez
rfcomm

2 ответа

1

Я решил так:

Для ПК с использованием записи SDP. Мы должны записать эту услугу в хорошо известный канал, который должен быть БЕСПЛАТНО, я имею в виду, что он не используется другой службой. Для этого выполните команду:

sdptool record local

Код для этого - http://people.csail.mit.edu/albert/bluez-intro/x604.html.

Пример раздела 4-9. Описание услуги

Эта две строки должны быть добавлены после того, как //установили общий идентификатор службы

// set the service class ID
sdp_list_t service_class = {NULL, &svc_uuid};
sdp_set_service_classes( record, &service_class);

и мы должны изменить канал на тот, который не используется другой службой. Например, канал 1:

uint8_t rfcomm_channel = 1;

Теперь, когда мы что-то слушаем на стороне ПК, мы должны подключиться к устройству Android непосредственно к каналу с помощью хорошо известного метода отражения, потому что, к сожалению, SDP теперь работает в Android.

Method bluetoothConnect;

bluetoothConnect = BlueDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class} );
CommunicationChannel = (BluetoothSocket) bluetoothConnect.invoke(BlueDevice, 1);

CommunicationChannel.connect();

Конечно, BlueDevice - это устройство, записанное методом startDiscovery(), и подставка "1" для канала 1.

0

Я знаю, что это не отвечает на ваш вопрос, я думаю, что bluecove (http://bluecove.org/) будет лучшим выбором для этого. Он поддерживает большинство операционных систем и обеспечивает достойную библиотеку для Java.

Я не думаю, что bluez будет работать для Windows, для этого вам нужен стек WIDCOMM или BlueSoleil, и bluecove будет использовать соответствующий стек для вас.

  • 0
    Спасибо ! Я принимаю это во внимание. Но я предпочитаю использовать нативную библиотеку C / C ++, потому что она более легкая (но и более сложная в использовании), а графический интерфейс приложения основан на Qt Framework.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню