【问题标题】:Android app not being able to connect to more than 2 devicesAndroid 应用程序无法连接到 2 台以上的设备
【发布时间】:2012-05-13 14:32:07
【问题描述】:

我正在创建一个连接 4 个设备的应用程序。其中一个充当服务器,另外三个充当客户端。服务器还充当客户端。这是一个纸牌游戏。我给了它 7 个 UUID。当我创建服务器时,3 个客户端中有 2 个能够连接,但是当第三个客户端加入时,应用程序崩溃。这是第三个设备尝试连接时 logcat 的一部分。

        05-12 15:41:55.453: E/ConnectionService(10793): getConnectedSocket : 503c7432-bc23-11de-8a39-0800200c9a66
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793): IOException in getConnectedSocket
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793): java.io.IOException: Service discovery failed
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:377)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:201)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at net.clc.bt.ConnectionService.getConnectedSocket(ConnectionService.java:191)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at net.clc.bt.ConnectionService.access$5(ConnectionService.java:185)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at net.clc.bt.ConnectionService$1.connect(ConnectionService.java:225)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at net.clc.bt.Connection.connect(Connection.java:191)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at net.dillen.satat.Satat.onActivityResult(Satat.java:308)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.app.Activity.dispatchActivityResult(Activity.java:3835)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.app.ActivityThread.deliverResults(ActivityThread.java:3332)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:3378)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.app.ActivityThread.access$2700(ActivityThread.java:123)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1900)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.os.Handler.dispatchMessage(Handler.java:99)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.os.Looper.loop(Looper.java:123)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at android.app.ActivityThread.main(ActivityThread.java:4370)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at java.lang.reflect.Method.invokeNative(Native Method)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at java.lang.reflect.Method.invoke(Method.java:521)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
05-12 15:41:55.463: I/net.clc.bt.ConnectionService(10793):  at dalvik.system.NativeStart.main(Native Method)

minSdkVersion="7" 
device OS = 2.3.3 , 2.3.3, 2.1.1, 2.1.1

操作系统版本似乎没有出现问题。

【问题讨论】:

    标签: android bluetooth


    【解决方案1】:

    我对您提供的堆栈跟踪没有任何评论,但是当您尝试添加第三个对等方时出现问题的事实让我怀疑您遇到了核心蓝牙限制。让我解释一下。

    蓝牙通信发生在具有 1 个主设备(负责设置时间)和最多 7 个从设备的微微网中。一个设备参与多个微微网是棘手且低效的,因为它必须在不同微微网的时钟周期之间来回跳转。根据我的经验,一个设备只能是 2 个微微网中的从属设备,因此当您尝试进入第三个微微网时它会失败(当然,它应该比这更优雅、更丰富地失败)。

    一般的解决方案是将一台设备指定为微微网主设备,而所有其他设备应仅连接到这台设备。在实践中,我只在允许比 Android 更多控制的系统上尝试过这个(例如,我可以显式控制主从控制)所以我​​不能说这将如何在 Android 上工作,但你应该开始根据经验,发起连接的设备将是主设备。

    或者我可能想太多了。我发现 Android 上的蓝牙堆栈非常有问题,所以你可能只是遇到了一个错误。顺便说一句,我假设您测试过的四款手机来自不止一家制造商?

    【讨论】:

    • 是的,其中一个是 HTC,其余的是 SE..当然不同型号。该系统是其他3个设备连接到主设备。所以我们只将它们连接到一个蓝牙地址。当用户点击“加入客户端”时,他会得到一个服务器列表并选择创建服务器的设备。所以只有一个master,其余都是client。
    • 好的,拓扑很好,但是主节点是否启动连接(例如,它是否执行 socket.connect)?如果不是,那么我建议您尝试这样做。如果是,并且您没有为您的问题找到其他解释,那么您可以通过获取 root 访问权限来进一步解决此问题,以便您可以运行 HCITOOL,这将允许您检查连接并查看哪个设备是主设备。
    • 是的。它确实做了socket.connect。我会按照你的建议尝试使用 HCITOOL 并发布反馈。谢谢汤姆
    • 您找到解决问题的方法了吗?我也有同样的问题...stackoverflow.com/questions/16935608/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多