自动查找已配对的蓝牙设备,当它们在范围内时
Posted
技术标签:
【中文标题】自动查找已配对的蓝牙设备,当它们在范围内时【英文标题】:Find already paired bluetooth devices automatically, when they are in range 【发布时间】:2013-07-23 12:46:54 【问题描述】:我不是蓝牙专家,我想知道当它们在彼此的范围内时,有哪些方法可以自动找到已配对的蓝牙设备。
背景: 在我们的例子中,android 应用程序需要通过蓝牙 (Rfcomm) 连接到专用配件。两个设备是彼此已知的(它们是配对的)。 Android 应用程序注册一个广播接收器。在应用程序启动期间,应用程序启动发现以查找专用附件。如果配件在范围内,一切都很好。
问题: 用户在专用附件范围之外启动应用程序。 Android 应用程序尝试发现附件但没有成功。然后用户进入蓝牙附件的范围。广播接收器不会收到关于现在范围内的配件的通知。
类似的话题/可能的解决方案 在 *** 上已经提出了类似的问题(例如autoconnect to bluetooth device when in range)。 但不断尝试发现范围内的蓝牙设备并不是我想要的,因为这会导致 Android 设备的电池消耗过多。
另一种解决方案是尝试在 Activity 的 onResume 方法中连接到配对设备。这可行,但缺点是应用程序无法在后台运行。因此,用户必须至少将应用程序带到前台一次才能启动连接。
我想到的第三个想法是在 Android 应用程序中也实现一个服务器套接字。当 android 应用程序启动并且发现没有成功完成时,Android 应用程序可以创建服务器套接字并监听附件的传入通知。这在某些情况下会有所帮助(例如,用户启动他的应用程序,接近附件,激活附件并且附件在启动时通知应用程序它现在在范围内)。但这仍然不是 100% 的解决方案,因为两个设备都可以在彼此的范围之外启动。此外,还必须实现附加功能(Android 设备中的蓝牙服务器套接字……)。
所以我想知道是否存在更好的解决方案。我正在寻找一种不需要额外的 ServerSockets 的解决方案,并且我总是收到两个已配对的设备在彼此范围内的通知:-)
感谢您的帮助!
【问题讨论】:
我会采用您的第二种解决方案,其中手机尝试连接配件而不搜索相同的配件,以手机和耳机为例,如果连接并且 1 超出范围,通常耳机会尝试连接到之前配对的设备一段特定的时间(取决于耳机实现)。 嘿!感谢您的回复。第二种解决方案的缺点是必须以某种方式触发(例如 onResume)。在 onResume 的情况下,用户必须将应用程序带到前台。我正在寻找一种在正确的时间自动执行此操作的可能性,以方便用户:-) 不可能在后台运行一个服务来处理蓝牙设备的连接/搜索 是的,这就是解决方案。您让用户手动配对设备。后台服务尝试为绑定的设备创建一个 rfcomm 套接字。因此,不需要发现。但是对于这种方法,附件托管蓝牙服务器并且应用程序充当客户端是强制性的 【参考方案1】:首次连接设备后,将mac地址保存在本地列表中。 断开连接时,使用将 autoconnect 设置为 true 的 connectGatt 以在您处于范围内时自动重新连接。
【讨论】:
【参考方案2】:不是一个完整的解决方案,但您的应用程序在屏幕打开时轮询附件的存在可能就足够了?在这种情况下,这可能会有所帮助:Start Activity on wake up/sleep in Android
【讨论】:
嘿。感谢您的回复!这也是一个很好的解决方案(比“onResume”解决方案更好)。但你是对的,仍然不是 100% 的解决方案。在查看 ACL 和低级消息之后,这似乎是使用解决方案 3 的最佳方式 - 因为我们拥有专用附件的舒适性。 link以上是关于自动查找已配对的蓝牙设备,当它们在范围内时的主要内容,如果未能解决你的问题,请参考以下文章