在Android 5.0上连续扫描BLE广告是否可以接受?

时间:2015-03-28 13:31:55

标签: android bluetooth-lowenergy

假设我需要检测仅以1 Hz的频率传输60秒的BLE广告,而且我不知道当天的广告时间。为此,我需要不断扫描。

official docs say

  

由于扫描是电池密集型的,因此您应遵守以下准则:

     
      
  • 找到所需设备后,请立即停止扫描。
  •   
  • 永远不要在循环上扫描,......
  •   

但这不包括我的用例。

最新的BLE芯片(例如CC2560)在扫描时使用大约5 mA,我假设在使用SCAN_MODE_LOW_POWER时占空比减小。我的问题是,如果我使用该模式,是否可以全天候扫描(并告知用户)?

iOS也是如何为iBeacons做的?

3 个答案:

答案 0 :(得分:3)

  

在Android 5.0上连续扫描BLE广告是否可以接受?

它与哪个Android版本无关。它完全取决于您的实现和用户群。如果您认为在继续扫描设备时不会丢失用户,则可以这样做。

您还可以在Android 5.1的BluetoothLEScanner中提供低功耗,低频扫描等参数,请参阅ScanSettings

您还可以在Android 5.1,上使用filters,它不会为所有可用设备执行每段代码(gatt,bluetoothService,框架,您的应用和许多内容),但会让Bluetooth Gatt图层(和蓝牙服务,你的应用程序)知道你正在寻找的设备(你在过滤器中提供)是否在附近。引入此滤波器是为了节省扫描时间内的电池电量。

P.S: - 我提到5.1,因为5.0蓝牙代码很糟糕。

答案 1 :(得分:1)

听起来你不得不不断地听取满足要求。如您所示,这对于功耗原因并不理想。

这是否正常取决于如何使用它。这是针对具有已知用户群的特定应用程序,需要此功能并了解耗电行为吗?如果是这样,那可能就行了。这是一般用户吗?不,这不行。

我的理解是iBeacon每隔x秒发送一次。对于接收器来听一个区域中的所有iBeacons,它只需要监听x秒。在这种设计中,信标和接收器都可以限制它们的功耗。

如果您可以通过同步发送器和接收器的时间进行同步,或者在发送广告时展开广告,则可以解决功耗问题。

答案 2 :(得分:1)

不幸的是,Android仍然为BLE堆栈提供了一步母亲待遇。当BLE设备接近类似于iOS 7+提供的功能时,Android中没有任何东西可以唤醒应用程序。

我们乐观地认为5.0+会有很大的改进,但相反它破坏了一些现有的功能。一些设备如Nexus 4和HTC One在Android L更新后(即使在低延迟模式下每5-10秒发现一次)扫描活动减少,这使得它几乎无法用于我们的用例。

因此,唯一的解决方案是连续扫描BLE设备,这肯定会耗尽电池。 根据您的使用情况,您可以尝试某种机制来停止扫描并仅在需要时启动。 就像我们的应用程序一样,我们使用加速计来检查手机何时运动。如果手机没有移动,我们会停止扫描并在移动手机时再次启动。