android - 配对时蓝牙接近扫描

标签 android bluetooth arduino bluetooth-lowenergy

我一直在对我想做的这个项目进行大量研究,可能阅读了每一篇 SO 帖子(bluejacking、RFCOMM、beacons 等),我的头在旋转。

我想在家里创建一个系统,使用 Arduino(带蓝牙文件)扫描蓝牙并检测我的手机或任何家人的手机何时在附近。这是一个 MAC 扫描器还是简单地获取友好名称。我也想获得 RSSI。我不需要进行精确的距离测量,但我想知道它们大约有多近。有人对这种方法有什么建议吗?我知道我可以在手机上创建一个应用程序并将其变成一个信标,这可能是一个选项,但我担心 Android,它必须至少是 Marshmallow 5.0。我希望支持比这低一点,比如 JB 或 KK。所以,似乎应该有一个简单的扫描,只是寻找 MAC 或名称。这就是我真正需要的。

也就是说,我的主要问题是,如果蓝牙设备已经配对,您能否扫描并查看范围内的蓝牙设备?比如蓝牙耳机?我了解蓝牙是点对点的,但它是否允许多个连接或至少在配对时广播 mac 或名称?

这个问题以及任何一般性建议将极大地帮助我!

谢谢!

最佳答案

来自监听器的蓝牙发现涉及监听蓝牙查询数据包 (RX) 和查询响应 (TX)。如果持续进行,这将耗尽电池。因此,大多数设备(包括移动电话和耳机)都有一个何时可发现和可连接的策略。尤其是耳机只有在收到指令时才可发现并且可连接,直到一个设备连接到它(可能有异常(exception)情况,耳机能够同时连接到多部手机)。大多数手机只有在设置屏幕(Android、IOS 和 Windows Phone)中才能被发现,但与耳机盒不同,它们是可连接的。

因此,手机的一个选项是在配对一次后查看是否可以连接到它们(例如,通过尝试在远程设备上搜索服务并查看它是否返回服务属性,这会在内部建立连接并间接确保设备的存在)。

如果您特定于已经配对的手机,那么您可能需要建立具有身份验证和加密的更高层连接(例如 SPP)。这将强制在设备之间进行双向检查以查看它们是否已经配对。另一个不太安全的选择是依赖手机(Android 和 IOS 手机通常不允许没有加密/配对的更高层连接)并尝试与手机建立 SPP 连接。

另一种选择是使用低功耗蓝牙。但请注意,在 BTv4.1 之前,BT 的安全性优于 BLE,在 BTv4.2 上也是如此。

关于android - 配对时蓝牙接近扫描,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39472705/

相关文章:

c - 有没有办法让我的补充代码更加高效并允许一次多个输出?

java - Android Java - 如何在 DatePicker 中获取一年中的某一天?

android - 动画显示用户位置 (Android)

android - 向 ViewPager 添加标题

android - 在后台服务中启动线程时调用或发送消息到 Activity

c# - 以编程方式打开 Windows 8 蓝牙控制面板

bluetooth - 为什么BILE的广告包有固定模式访问地址(0x8E89BED6)

error-handling - 蓝牙 HC-05 发送错误 1F 仅适用于 INQ 命令

c++ - 有没有一种干净的方法可以在 leonardo 中禁用 USBCore 的 RX 控制?

将 Arduino 加速度计的 G 值转换为 float