后台信标扫描 - Android O
Beacon scanning in background - Android O
Google添加了应用在后台时不向应用广播蓝牙开关状态的限制。这有效地阻止了后台优化的蓝牙信标扫描。除了定期作业调度之外,如何解决这个问题?
感谢任何帮助。
在 Android 8+
上,您有多种后台 BLE 信标扫描选项
常规后台服务。你可以像在 Android 4.3-6.x 上一样使用这些,但你通常被限制在后台 10 分钟的 运行ning 时间,之后 Android 将杀死您的应用程序,它将无法再进行扫描。
使用前台服务。它们的工作方式与 Android 后台服务非常相似,只是它们会显示带有您选择的图标的实时通知,以表明您的应用程序正在后台运行 运行。使用前台服务,您可以像 Android 4.3-6.x.
一样不受限制地在后台有效扫描信标
使用基于意图的扫描。如果您只需要知道信标何时出现或消失,您可以使用蓝牙数据包过滤器为 BLE 设备设置基于意图的扫描,该过滤器过滤信标字节模式的存在或字节模式的缺失的灯塔。当信标出现或消失时,Android 将向您应用中的 BroadcastReceiver 发送一个 Intent,这将在后台唤醒它并让它 运行 等待大约 10 分钟,然后将其杀死。在此期间您可以继续扫描信标。
使用作业调度程序。您最多可以在后台每隔约 15 分钟将作业安排到 运行 以进行扫描。一项工作通常限制在 10 分钟的后台 运行ning 时间。由于开始时间相差 +/- 10 分钟,因此您将有最多 0-15 分钟的间隔时间不进行扫描。
玩 (3) 和 (4) 的游戏来改变规则。虽然这违背了 Android 限制的精神,但您可以通过立即启动一个作业,在 10 分钟之前取消它,然后重新启动它来使用作业调度程序玩游戏。您可以通过简单地一遍又一遍地触发基于意图的扫描来做类似的事情。但是请注意,执行这些操作会耗尽用户的电池电量,可能会导致他们卸载您的应用程序。此规则弯曲可能会在未来 Android 版本中被阻止。
你可以阅读我的博客 post 了解这些技术的优点 here. The open source Android Beacon Library 默认在 Android 8+ 设备上使用技术 3 和 4,并且还支持配置前台服务如果您想选择选项 2.
Google添加了应用在后台时不向应用广播蓝牙开关状态的限制。这有效地阻止了后台优化的蓝牙信标扫描。除了定期作业调度之外,如何解决这个问题?
感谢任何帮助。
在 Android 8+
上,您有多种后台 BLE 信标扫描选项常规后台服务。你可以像在 Android 4.3-6.x 上一样使用这些,但你通常被限制在后台 10 分钟的 运行ning 时间,之后 Android 将杀死您的应用程序,它将无法再进行扫描。
使用前台服务。它们的工作方式与 Android 后台服务非常相似,只是它们会显示带有您选择的图标的实时通知,以表明您的应用程序正在后台运行 运行。使用前台服务,您可以像 Android 4.3-6.x.
一样不受限制地在后台有效扫描信标
使用基于意图的扫描。如果您只需要知道信标何时出现或消失,您可以使用蓝牙数据包过滤器为 BLE 设备设置基于意图的扫描,该过滤器过滤信标字节模式的存在或字节模式的缺失的灯塔。当信标出现或消失时,Android 将向您应用中的 BroadcastReceiver 发送一个 Intent,这将在后台唤醒它并让它 运行 等待大约 10 分钟,然后将其杀死。在此期间您可以继续扫描信标。
使用作业调度程序。您最多可以在后台每隔约 15 分钟将作业安排到 运行 以进行扫描。一项工作通常限制在 10 分钟的后台 运行ning 时间。由于开始时间相差 +/- 10 分钟,因此您将有最多 0-15 分钟的间隔时间不进行扫描。
玩 (3) 和 (4) 的游戏来改变规则。虽然这违背了 Android 限制的精神,但您可以通过立即启动一个作业,在 10 分钟之前取消它,然后重新启动它来使用作业调度程序玩游戏。您可以通过简单地一遍又一遍地触发基于意图的扫描来做类似的事情。但是请注意,执行这些操作会耗尽用户的电池电量,可能会导致他们卸载您的应用程序。此规则弯曲可能会在未来 Android 版本中被阻止。
你可以阅读我的博客 post 了解这些技术的优点 here. The open source Android Beacon Library 默认在 Android 8+ 设备上使用技术 3 和 4,并且还支持配置前台服务如果您想选择选项 2.