我有一个应用程序可以通过蓝牙通过 RFCOMM 与自定义设备通信。通信代码基于 BluetoothTalk 示例项目。它之前在 Galaxy S3、Galaxy S2、Galaxy Note 和 Nexus 7 上运行都没有任何问题。
最近,Nexus 7 升级到 Android 4.2 之后,出现如下问题:
当您第一次使用应用建立连接时,即设备刚开机,应用刚启动,没问题,可以正常获取数据。
<然后,如果您停止通信并尝试重新启动,通信将失败并出现错误“java.io.IOException:bt 套接字已关闭,读取返回:-1”。从那时起,无论您尝试重新连接多少次,它总是会失败。
让它再次工作的唯一方法是,如果您重新启动自定义设备和应用程序,然后尝试连接,通信就会正常。但是,一旦您停止并重新启动通信,它就会继续失败。
我借了一台装有 Android 4.2 的 Nexus 4,但问题依然存在。
这真的很烦人,因为我们设备的主要值(value)依赖于蓝牙 RFCOMM 应用程序。我仔细检查了 Android 4.2 中关于 BT 的文档,没有发现任何重大变化。我对我这边的代码相当有信心,因为它适用于任何未运行 4.2 的 Android 设备
任何提示或建议将不胜感激。该设备需要在 12 月初进行演示,我们真的希望尽快解决这个问题。
编辑:现在4.2.1已经发布了,问题还是没有解决。我们至少可以得到一些关于它是否正在工作并且会很快修复的确认吗?
最佳答案
这对您帮助不大,但请注意,Google 在 4.2 中引入了全新的蓝牙堆栈。
这应该是一件好事 - 根据我作为用户和开发人员的经验,带有 Bluez 的 Android(旧组合)从来没有可靠地运行过,所以我很高兴听到他们进行了全面重写。
我想我只能说,听起来您在新堆栈中遇到了错误或怪癖。很遗憾听到新堆栈也存在问题。
关于您的演示,请注意 Google 发布了所有 Nexus 设备的固件镜像 (https://developers.google.com/android/nexus/images),将它们刷入您的设备相当容易。
所以我建议您提交错误报告,然后将您的设备刷写到 4.1.2。
关于android - 蓝牙 RFCOMM 连接无法在 Android 4.2 上连续建立,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13460569/