获取BLE扫描,不使用过滤器复制UUID

CoD*_*oDe 10 android bluetooth-lowenergy network-scan

我正在写一个BLE应用程序,需要跟踪外围设备是广告还是停止.

我跟着获得了没有重复的外围设备startLeScan()的 BLE 过滤行为,我在这里完全同意.

为了使其可行,我保留了定时器,在一定时间(3秒)后重新扫描外围设备.但随着市场上新设备的推出(5.0更新),一些时间重新扫描需要一些时间来寻找外围设备.

任何建议或是否有人实现了这一点?

Chr*_*ohn 5

听起来您对扫描广告感兴趣而不是连接到设备。这是 Bluetooth Low Evergy 中的“观察者”角色,对应于通常称为信标的“广播者”角色。(蓝牙核心 4.1 第 1 卷 A 部分第 6.2 节)

通常,您启用被动扫描,查找信标广播的 ADV_IND 数据包。这些可能包含也可能不包含 UUID。或者,您可以通过发送 SCAN_REQ 来主动扫描,您可能会收到 SCAN_RSP。许多设备在 ADV_IND 和 SCAN_RSP 中使用不同的广告内容来增加可以广播的信息量 - 例如,您可以将 UUID128 放入 ADV_IND 中,然后在 SCAN_RSP 中添加设备名称。(蓝牙核心 4.1 第 2 卷第 E 部分第 7.8.10 节)

现在您需要定义“消失”——您是希望广告停止还是消失?您将在每个广告中获得一个接收信号强度指示“RSSI” (蓝牙核心 4.1 第 2 卷第 E 部分第 7.7.65.2 节) ——这就是 iBeacon 定位的工作原理,并且在 Android 中有大量对信标接收器的支持。

或者,您等待N秒以获得应每T秒传输一次的广告,其中N>2T。定时方法的缺点是可能没有收到信标与肯定收到弱信标不同。确保您需要N很大,这会影响广播器被关闭或超出范围与您的应用程序检测到它之间的延迟。

还有一件事 - 注意如果有东西连接到外围设备(如果你真的在扫描外围设备),广告就会停止,这是监视 RSSI 的另一个好理由。

  • 是的,你是对的,连接现在不是问题,我同意你们大多数人提到的。在我的情况下,客户端外围设备会在特定的定义时间内做广告,并且中央设备(Android 设备)执行扫描。现在,一些Android手机(如S5、Nx-5)扫描连续数据包并将其响应**连续到应用层**。但是某些手机(如 Nx-4)可能会进行连续扫描,但不响应 **DUPLICATE PACKET(即相同设备)**..这是这里的问题。任何输入在这里! (2认同)

Jer*_*rry 3

第一种场景:保税设备

我们知道,如果bond创建了,那么大多数商用设备都会directed advertisements在重新连接期间发送。在这种情况下,根据 BLE 4.0 规范,您无法在任何 BLE 嗅探器上扫描这些设备。

第二种场景:可连接设备

外围设备最初处于复位阶段时通常处于此模式。中央发送一个connect发起者来响应advertisement数据包。此方案为您提供了很大的灵活性,因为您可以使用两个主要的配置选项来改变连接时间。它们是:slavelatency外围和conninterval中央。现在,我不知道需要付出多少努力才能使其在 Android 平台上运行,但如果您使用 Bluez BLE 堆栈和可配置外设(例如 TI 传感器标签),那么您可以使用这些值。

第三种场景:Beacon设备

由于这就是您的问题所围绕的问题,根据 BLE 架构,没有任何参数可供使用。在这种情况下,中央设备只是一个愚蠢的设备,当外围设备选择发送其信标信号时,它就会受到支配。

参考:

http://www.amazon.com/Inside-Bluetooth-Communications-Sensing-Library/dp/1608075796/ref=pd_bxgy_14_img_z

http://www.amazon.com/Bluetooth-Low-Energy-Developers-Handbook/dp/013288836X/ref=pd_bxgy_14_img_y