Я пытаюсь адаптировать пример BluetoothChat, который поставляется с SDK, для конфигурации с одним сервером и несколькими клиентами. У меня проблемы и надеюсь, что кто-то может помочь.
Я создал два отдельных приложения, сервер и клиент, вместо того, чтобы использовать одну функцию приложения в качестве сервера и клиента, как в примере. Таким образом, после запуска приложения сервер создает службу Bluetooth, которая создает новый AcceptThread, который прослушивает входящие соединения. Я сделал несколько изменений в коде примера, чтобы AcceptThread продолжал прослушивать, даже после того, как было установлено первое соединение (пример прекращает прослушивание после того, как установлено одно соединение, потому что ему нужно только установить соединения между двумя устройствами). Я создал ArrayList для обработки нескольких соединений. Каждый раз при попытке нового подключения с удаленного устройства создается новый ConnectedThread и добавляется в список.
Первый клиент подключается просто отлично.
Когда второй клиент пытается подключиться, соединение не устанавливается. Вывод журнала:
D/BluetoothEventLoop( 140): Device property changed: <device address> property: Connected value: true
I/BluetoothService( 140): ACL connected, mAclLinkCount = 2
D/BluetoothEventLoop( 140): Device property changed: <device address> property: Connected value: false
I/BluetoothService( 140): ACL disconnected, mAclLinkCount = 1
Таким образом, похоже, что вторая попытка подключения прошла успешно, но затем она немедленно отключается. Похоже, что это происходит на низком уровне, вне всего, что обрабатывает код. Это происходит с несколькими различными типами тестовых устройств, поэтому я не думаю, что это связано с определенной прошивкой или аппаратной проблемой.
Может кто-нибудь помочь с этим?
Кроме того, может ли кто-нибудь указать на пример подключения к серверу -> нескольким клиентам с использованием Bluetooth с Android? Я наткнулся на пример по воздушному хоккею:
http://code.google.com/p/apps-for-android/source/browse/#svn%2Ftrunk%2FBTClickLinkCompete%2Fsrc%2Fnet%2Fclc%2Fbt
Но этот проект очень глючит на моих тестовых устройствах, и сама игра не будет отображаться правильно. Кто-нибудь знает, есть ли пример BluetoothChat, расширенный для обработки нескольких соединений?
UPDATE:
Пытаясь решить эту проблему, я полагаю, что успешно расширил официальный пример Android Bluetooth Chat для работы с сервером, подключенным к нескольким клиентам.
Я загрузил свои модификации в github здесь .
Одно устройство выступает в роли сервера, выбрав «Меню> Сделать доступным для обнаружения». Затем каждый клиент подключается, выбрав «Меню> Подключить устройство». Мне удалось подключить Motorola Droid и HTC Eris в качестве клиентов к моей Samsung Galaxy Tab 10.1 ". Каждое сообщение, отправленное клиентом, отображается только на сервере. Сообщение, отправленное с сервера, отображается на всех клиентах.
Это был утомительный процесс, заставляющий его работать вообще. Однако подключение к устройствам HTC носит эпизодический характер. Я читал в другом месте, что Bluetooth на HTC глючит, так что я довожу до этого.
Надеюсь, кто-то найдет этот пример полезным. Если у вас есть какие-либо вопросы, предложения или другие отзывы, пожалуйста, дайте мне знать.