Android 在安卓5.0上,是否可以连续扫描可屏蔽广告?

Android 在安卓5.0上,是否可以连续扫描可屏蔽广告?,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,假设我需要检测一个BLE广告,该广告仅以1Hz的频率传输60秒,我不知道这一天的时间。为此,我需要不断扫描 由于扫描需要大量电池,因此应遵守以下准则: 找到所需设备后,立即停止扫描 永远不要扫描循环 但这不包括我的用例 最新的BLE芯片(例如CC2560)在扫描时使用约5 mA,我假设在使用时占空比会降低。我的问题是,如果我使用这种模式,是否可以24/7扫描(并通知用户) iOS是如何为iBeacons做到这一点的?听起来你不得不不断地听才能满足需求。正如您所指出的,出于功耗原因,这并不理

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

由于扫描需要大量电池,因此应遵守以下准则:

  • 找到所需设备后,立即停止扫描
  • 永远不要扫描循环
但这不包括我的用例

最新的BLE芯片(例如CC2560)在扫描时使用约5 mA,我假设在使用时占空比会降低。我的问题是,如果我使用这种模式,是否可以24/7扫描(并通知用户)


iOS是如何为iBeacons做到这一点的?

听起来你不得不不断地听才能满足需求。正如您所指出的,出于功耗原因,这并不理想

这是否正常取决于如何使用它。这是否适用于具有已知用户群的特定应用程序,该用户群需要此功能并了解耗电行为?如果是这样的话,可能没关系。这是给普通用户的吗?不,这不好

我的理解是iBeacon每x秒传输一次。要让接收器听到一个区域内的所有iBeacon,它只需要听x秒钟。在这种设计中,信标和接收机都可以限制其功耗

如果您可以更改广告的发送方式,则可以解决功耗问题,方法是在发射机和接收机继续运行时进行同步,或者在发送广告时进行分散

在安卓5.0上,是否可以连续扫描可屏蔽广告

它是哪一个Android版本并不重要。这完全取决于您的实现和用户群。如果你认为如果你继续扫描设备,你不会失去用户,那就可以这样做

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

你也可以在安卓5.1上使用,它不会对所有可用的设备执行每一段代码(gatt、蓝牙服务、框架、你的应用程序和很多东西),但会让蓝牙gatt层(以及蓝牙服务和你的应用程序)知道你要找的设备(你在过滤器中提供的)是否在附近。该滤波器的引入是为了在扫描时间内节省一些电池电量


注:-我到处都提到5.1,因为5.0蓝牙代码很糟糕。

不幸的是,Android仍然为BLE stack提供了母亲般的治疗。Android中没有任何东西可以在类似iOS 7+提供的可移动设备接近时唤醒应用程序

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

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

通常情况下,信标每秒会24小时发送多次信号,因此手机会在短时间的扫描间隔内很好地了解外面的情况。像OP I一样,安卓设备有一个不寻常的应用程序,在该应用程序中,安卓设备会持续通电,所以电池耗电不是问题。然而,我读到安卓系统中的连续扫描最终肯定会失败:“你不能连续扫描。如果你尝试这样做,你最终将完全停止发现设备。这也是一个电池消耗,并破坏其他操作的稳定性。你必须使用间歇扫描脉冲模拟连续扫描。”