我正在尝试将SDK附带的BluetoothChat示例调整为单服务器,多客户端配置。我有问题,希望有人可以提供帮助。
我创建了两个不同的应用程序,一个服务器和一个客户端,而不是像服务器和客户端那样只有一个应用程序功能,如示例所示。因此,在启动应用程序时,服务器会创建一个蓝牙服务,该服务会创建一个新的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
所以看起来第二次连接尝试成功,但随后立即断开连接。这似乎发生在低级别,在代码处理的任何内容之外。这种情况发生在许多不同类型的测试设备上,因此我认为这不是由于特定的固件或硬件问题。
任何人都可以帮忙吗?
此外,任何人都可以指出使用蓝牙与Android的服务器 - >多个客户端连接示例的示例吗?我遇到了一个空气曲棍球的例子:
但是这个项目在我的测试设备上非常糟糕,实际的游戏将无法正常显示。有没有人知道是否有一个扩展的BluetoothChat示例来处理多个连接?
更新:
在尝试解决此问题时,我相信我已成功扩展官方Android蓝牙聊天示例,以便与连接到多个客户端的服务器配合使用。
我已将修改上传到github here。
通过选择“菜单&gt;可发现”,一台设备充当服务器。然后,每个客户端通过选择“菜单&gt;连接设备”进行连接。我成功地将我的摩托罗拉Droid和HTC Eris作为客户端连接到我的三星Galaxy Tab 10.1“。客户端发送的每条消息只显示在服务器上。服务器发送的消息显示在所有客户端上。
这是让它完全奏效的繁琐过程。但是,与HTC设备的连接是零星的。我在其他地方读过HTC上的蓝牙是有缺陷的,所以我正在粉碎它。
希望其他人会发现这个例子很有用。如果您有任何问题,建议或其他反馈,请告诉我。
答案 0 :(得分:0)
我测试了你的代码。因为,你说连接HTC作为主人是一个问题。我把三星S3作为主人,HTC作为客户。有效。但我再次尝试使用索尼爱立信手机。没有其他设备可以成功地充当主人。 S3有Blutooth 4.0版其他早期版本。你认为这个问题是因为蓝牙堆栈吗? 我需要在一个可以定制设备的项目中使用这个概念。试图找出天气问题与供应商(HTC,索尼)或其与蓝牙堆栈有关。而且我不知道如何找出答案。这没有记录。 :( 谁有人面对这个?