我不是蓝牙专家,并且想知道当它们彼此的范围时,可以自动找到已配对的蓝牙设备的可能性。
背景: 在我们的例子中,Android应用程序需要通过蓝牙(Rfcomm)连接到专用配件。两个设备彼此已知(它们是配对的)。 Android应用程序注册广播接收器。在应用程序启动期间,应用程序启动发现以查找专用附件。如果配件在范围内,一切都很好。
问题: 用户在专用附件的范围之外启动应用程序。 Android应用程序试图发现附件但没有成功。然后用户进入蓝牙配件的范围。广播接收器将不会收到有关现在范围内的配件的通知。
类似主题/可能的解决方案 在stackoverflow上已经提出了类似的问题(例如autoconnect to bluetooth device when in range)。 但是不断尝试发现范围内的蓝牙设备并不是我想要的,因为这会导致Android设备的电池消耗过多。
另一种解决方案是尝试连接到Activity的onResume方法中的配对设备。这可行,但缺点是应用程序无法在后台运行。因此,用户必须至少将应用程序带到前台以启动连接。
我想到的第三个想法是在Android应用程序中实现服务器套接字。当Android应用程序启动并且发现完成但没有成功时,Android应用程序可以创建服务器套接字并监听附件的传入通知。这在某些情况下会有所帮助(例如,用户启动他的应用程序,接近附件,激活附件,并且附件在启动时通知应用程序它现在在范围内)。但这仍然不是100%解决方案,因为两个设备都可以在彼此的范围之外启动。此外,必须实施其他功能(Android设备中的蓝牙服务器插槽......)。
所以我想知道是否存在更好的解决方案。我正在寻找一个解决方案,不需要额外的ServerSockets,我总是得到两个已经配对的设备在彼此范围内的通知: - )
感谢您的帮助!
答案 0 :(得分:0)
不是一个完整的解决方案,但也许只要屏幕开启,您的应用就足以轮询该附件的存在?在这种情况下,这可能会有所帮助:Start Activity on wake up/sleep in Android
答案 1 :(得分:0)
首次连接设备后,将mac地址保留在本地列表中。 断开连接时,使用将connectconnect设置为true的connectGatt可以在范围内时自动重新连接。