Как создать сокет Android RFCOMM без каких-либо входных данных от пользователя?
Здесь сценарий:
Мне нужно написать приложение для Android, чтобы создать сокет RFCOMM на ПК с помощью Bluetooth-ключа (я тоже буду писать сервер).
Мое требование состоит в том, что пользователю не нужно парковать устройство вручную.
На самом деле, с большим взломом, я использую createInsecureRfcommSocket.
Маленький сценарий: у меня есть приложение для Android, которое обменивается информацией с ящиком Linux с открытым гнездом RFCOMM. Я могу вручную установить PIN-код на устройствах (жесткое кодирование - это вариант)
Я ищу разные дороги:
Создать оболочку JNI
Как было сделано здесь от Max Kellermann, я могу написать слой JNI, чтобы сделать всю фазу спаривания. Это должно быть хорошим вариантом, но есть проблема:
NDK 4b не предоставляет библиотеки libbluetooth, поэтому -lbluetooth терпит неудачу, а также NDK v.3.
Параметры:
- Найдите NDK 1.5 (который включает в себя lib bluetooth). После нескольких дней поиска в Интернете я не смог узнать. Кто-нибудь знает или знает, где я могу его найти?
- Скомпилируйте libbluetooth для Android самостоятельно и используйте их для -lbluetooth. Там не повезло, я не могу их построить. Любой намек?
Использовать что-то, открытое API
Кто-нибудь знает, как я могу использовать createRfcommSocketToServiceRecord и пользователь не должен вручную подключать устройство? Является ли это возможным? Как мне написать сервер?
Что-то, чего я не знаю
Может быть (конечно!) есть кое-что, чего я не знаю. Может быть, я могу использовать что-то еще? Не RFCOMM? SDP?
Может быть, я могу вручную подключиться к API Android?
Я надеюсь, что был достаточно ясным, если не просто спросить. И снова, поскольку это не первый раз, я в ваших руках:)
Спасибо всем парням поддержки!
Ответы
Ответ 1
В конце я могу сказать, что вы не можете.
Даже если вы найдете способ, используя обертки, написание модулей C и т.д., эволюция Android, вероятно, изменит то, что вы используете.
Итак, нет выбора. К сожалению.
Посмотрите, как изменится API Android Bluetooth в будущем.
Ответ 2
API Android Bluetooth не завершен и изменится. Используйте на свой риск. Этот класс реализует API для слоя RFCOMM Bluetooth. Сокет RFCOMM похож на обычный сокет, так как он принимает адрес и номер порта. Разница, конечно, заключается в том, что адрес является адресом Bluetooth-устройства, а номер порта является каналом RFCOMM. API позволяет создавать сокеты прослушивания через методы связывания, прослушивания и принятия, а также для создания исходящих соединений с подключением, connectAsync и waitForAsyncConnect. После создания сокета вам нужно создать его, а затем уничтожить, когда вы закончите его использование. Оба создают и принимают возврат FileDescriptor для фактических данных. Кроме того, вы можете вызвать getInputStream и getOutputStream для получения соответствующих потоков без прохождения через FileDescriptor.