Как создать сокет Android RFCOMM без участия пользователя? - PullRequest
30 голосов
/ 17 ноября 2010

Вот сценарий:

Мне нужно написать приложение для Android для создания гнезда RFCOMM для ПК с Bluetooth-ключом (я тоже собираюсь написать сервер).

Мое требование заключается в том, что пользователю не нужно вручную подключать устройство.

На самом деле, с большим взломом, я использую createInsecureRfcommSocket .

Небольшой сценарий : у меня есть приложение Android, которое обменивается информацией с Linux-боксом с открытым сокетом RFCOMM. Я могу вручную установить PIN-код на устройствах (жесткое кодирование это опция)

Я ищу разные дороги:

Написать упаковщик JNI

Как было сделано здесь Максом Келлерманом, я могу написать слой JNI, чтобы сделать всю фазу спаривания. Это должно быть хорошим вариантом, но есть проблема:

NDK 4b не предоставляет библиотеки libbluetooth, поэтому -lbluetooth не работает, а также NDK v.3.

Параметры:

  1. Найдите NDK 1.5 (который включает в себя lib bluetooth). После нескольких дней поиска в Интернете я не смог узнать. Кто-нибудь имеет или знает, где я могу его найти?
  2. Скомпилируйте libbluetooth для Android самостоятельно и используйте их для -lbluetooth. Не повезло, я не могу их построить. Любой намек?

Использовать что-то, открываемое API-интерфейсами

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

Что-то, чего я не знаю

Может быть (конечно!) Есть кое-что, чего я не знаю. Может быть, я могу использовать что-то еще? Не RFCOMM? SDP

Может быть, я смогу выполнить сопряжение вручную с Android API?

Я надеюсь, что все было достаточно ясно, если не просто спросить. И опять же, так как это не первый раз, я в ваших руках:)

Спасибо за поддержку, ребята!

Ответы [ 2 ]

2 голосов
/ 20 февраля 2011

В конце могу сказать, что вы не можете .

Даже если вы найдете способ, используя обертки, написание модулей C и так далее, эволюция Android, вероятно, изменит то, что вы используете.

И так, нет никакой возможности. К сожалению.

Посмотрим, как изменится Android Bluetooth API в будущем.

0 голосов
/ 21 января 2011

API-интерфейс Bluetooth для Android не завершен, и изменится .Используйте на свой риск.Этот класс реализует API для уровня Bluetooth RFCOMM.Сокет RFCOMM похож на обычный сокет тем, что он принимает адрес и номер порта.Разница, конечно, в том, что адрес - это адрес устройства Bluetooth, а номер порта - канал RFCOMM.API позволяет устанавливать прослушивающие сокеты с помощью методов bind, listen и accept, а также устанавливать исходящие соединения с помощью connect, connectAsync и waitForAsyncConnect.После создания сокета вам необходимо создать его, а затем уничтожить, когда вы закончите его использовать.И create, и accept возвращают FileDescriptor для фактических данных.В качестве альтернативы вы можете вызвать getInputStream и getOutputStream, чтобы получить соответствующие потоки, не проходя через FileDescriptor.

...