cnb*_*410 10 android bluetooth rfcomm
我有一个应用程序通过RFCOMM通过蓝牙与自定义设备通信.通信代码基于BluetoothTalk示例项目.它在Galaxy S3,Galaxy S2,Galaxy Note和Nexus 7之前运行没有任何问题.
最近,Nexus 7升级到Android 4.2,从那时起,问题发生如下:
当您第一次使用该应用程序设置连接时,意味着该设备刚刚启动且应用程序刚刚启动,没问题,您可以正常获取数据.
然后,如果停止通信并尝试重新启动,则通信将失败并显示错误"java.io.IOException:bt socket closed,read return:-1".从那时起,无论您尝试重新连接多少次,它总是会失败.
让它再次工作的唯一方法是,如果你重新启动自定义设备和应用程序,然后尝试连接,通信变得正常.但是,一旦你停止并重新开始通信,它就会继续失败.
我借用了Android 4.2的Nexus 4,问题仍然存在.
这真的很烦人,因为我们设备的主要价值在于依赖于蓝牙RFCOMM应用程序.我在Android 4.2中仔细检查了关于BT的文档,并没有看到任何重大变化.我对我这方面的代码非常有信心,因为它适用于任何未运行4.2的Android设备
任何提示或建议将不胜感激.该设备需要在12月初进行演示,我们真的希望尽快解决这个问题.
编辑:现在4.2.1已经发布,问题仍未解决.我们是否至少可以得到一些关于它是否正在运行并将很快得到修复的确认?
这对你没有多大帮助,但请注意谷歌推出了全新的蓝牙堆栈4.2.
这应该是一件好事 - 根据我作为用户和开发人员的经验,带有Bluez(旧组合)的Android从未可靠地运行,因此我很高兴听到他们进行了全部重写.
我想我可以说的是,听起来你在新的堆栈中遇到了一个bug或怪癖.很遗憾听到新堆栈也存在问题.
关于您的演示,请注意Google会发布所有Nexus设备的固件映像(https://developers.google.com/android/nexus/images),并将它们闪存到您的设备相当容易.
因此,我建议您提交错误报告,然后将设备刷新到4.1.2.
我终于找到了解决办法。
事实证明这不是新的蓝牙驱动程序中的错误。这是蓝牙示例应用程序(更具体地说,Android SDK 提供的 BluetoothChat 项目)中未考虑的极端情况。
在BluetoothChat示例项目中的蓝牙服务代码中,当连接失败或丢失时,它总是重新启动服务以重新启动监听模式。手机作为服务器时没有问题,但在某些场景下手机作为客户端时,一旦进入监听模式,就无法连接到其他服务器。因为在“connect”函数中,它不会取消(In)SecureAcceptThread。因此,本质上您正在作为服务器监听其他连接,同时尝试作为客户端连接到其他服务器。这是矛盾的。
解决此问题的方法是,如果您确定您的手机不会用作侦听传入连接的服务器,则只需删除代码即可在连接失败或停止时重新启动侦听模式。
| 归档时间: |
|
| 查看次数: |
8736 次 |
| 最近记录: |