Вопрос по rfcomm, bluetooth, sample, android – Пример приложения Android Bluetooth Chat - несколько подключений

2

Можно ли настроить пример приложения Android Bluetooth Chat для одновременного подключения более одного человека и иметь мини-чат? Что это повлечет за собой?

Ваш Ответ

3   ответа
3

Я смог сделать мой собственный чат следующимофициальный учебник по Bluetooth и немного его изменив. К сожалению, я не могу предоставить большую часть своего кода, но основная идея:

Каждое устройство действует как сервер и как клиент. Когда чат запущен, устройство запускает свой серверный поток. Поток сервера такой же, как официальный, но не заканчивается, когда принимается соединение. Просто продолжай слушать.

Поток клиента такой же, как в учебнике.

И сервер, и клиентский поток управляют соединением одинаково. Я создал отдельные темы для принятия сообщенийпосле этого урока и один для отправки их.

private void manageConnectedSocket(BluetoothSocket socket) {        
    //create thread responsible for sending messages.
    SendingThread w = new SendingThread(socket);
    MainActivity.addSendingThread(w);
    //Creates listener for messages to accept.       
    MainActivity.addListener(socket);
}    

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

ВАЖНЫЙ:

You need to handle exceptions when message send fails and remove sending and recieving thread for device when you detect it is disconected. In my case I used well known UUID "00001101-0000-1000-8000-00805f9b34fb". For every device. You need to wait 3 second between atempts to connect as client because some devices has weak bluetooth hardware and it is refusing connect as client.
Вы где-нибудь публикуете свой код?
0

вы будете ограничены в этом диапазоне. Я думаю, что он предназначен для расширения основного устройства, а не для случайной связи

Источник: поиск "Программирование Bluetooth" в гугле

8

dr version: Bluetooth не подходит для этого, не используйте его, используйте вместо этого Wi-Fi, возможно, при поддержке веб-интерфейса.

Я тщательно исследовал эту проблему на протяжении многих лет в интересах исследовательского проекта социальной беспроводной сети. Мой общий совет: он не работает с более чем двумя / тремя людьми. Bluetooth просто не предназначен для беспроводных одноранговых сетей.

В общем, похоже, что дешевые контроллеры Bluetooth включены на устройства Android (especially Устройства HTC, iirc) на самом деле не обрабатывают более двух или трех подключений одновременно. Я не уверен, является ли это аппаратной или микропрограммной проблемой, но я могу рассказать о некоторых базовых анекдотах. Я работал над реализацией этой идеи на уровне SDK (т. Е. Без модификаций прошивки) примерно в начале 2011 года и смог получить одноранговый узел для получения двух дополнительных соединений (т. Е. Трех устройств, каждое из которых подключается к двум другим) для работайте в течение периода от нескольких минут до часа, прежде чем соединения внезапно прекратятся и сокет станет непригодным для использования, что потребует повторного подключения. К сожалению, 20 минут были верхней границей, и, как правило, было невозможно установить соединение с более чемone Другое устройство на всех надежно.

Цель проекта состояла в том, чтобы поддержать множество людей, молча взаимодействующих друг с другом в фоновом режиме, но это так и не осуществилось, вместо этого мы отключили Bluetooth и вместо этого перешли на Wi-Fi, который работал оченьmuch лучше. В общих чертах, я думаю, что люди рассматривают Bluetooth как возможную среду для надежной одноранговой связи, но на самом деле он не был разработан таким образом: это скорее среда, используемая для связи на небольших расстояниях между небольшими устройствами (например, гарнитуры).

Имейте в виду, что если вы хотите сделать это, максимальное количество устройств, к которым вы можете подключиться, является фиксированным, потому что согласно спецификации Bluetooth пикосеть поддерживает максимум семь устройств.(См. Статью в Википедии.)

Требуемое изменение просто: вы используетеdifferent UUID для каждого устройства. Это может быть реализовано несколькими способами, используя механизм внеполосного обмена или простую схему, в которой вы назначаете UUID все чаще и при подключении к сети, попробуйте каждый из них по очереди.

Вот некоторые соответствующие темы групп Google:

Bluetooth peer to peer networks Multiple connections on Android Bluetooth

Я не забываю опубликовать более детальную информацию о том, как это сделать (с кодом), которую я тоже мог бы найти, если смогу ее найти. Это должно быть с конца 2010 или начала 2011 года.

Таким образом, ответ, в резюме, да, вы можетеtry чтобы сделать это, используя несколько UUID (после того, как вы используете один, это все, и вы должны попробовать другой, используя некоторый протокол назначения). Однако на практике после большого количества проб и ошибок это на самом деле не работает для того, для чего вы, вероятно, хотите его использовать, и этоlot лучше пойти с интернет-бэкэндом. Кстати, это также хорошо по другой причине, большинству пользователей не очень нравится включать Bluetooth, опасаясь разрядки батареи.

Я хочу сделать приложение для чата Bluetooth, в котором устройства пользователя будут транслировать сигналы, ища другие устройства. На уровне API каждое устройство будет знать, доступны ли другие устройства, использующие мое приложение, для чата. Затем пользователь может выбрать любое другое устройство (другое лицо) для чата, и будет выполнена настройка соединения. Или, в случае отклонения другим лицом, подключившемуся пользователю будет сообщено об этом. Это может быть сделано? Спасибо

Похожие вопросы