Google添加了一些限制,即当应用程序在后台运行时,不向应用程序广播蓝牙开关状态。这有效地在后台阻止了优化的蓝牙信标扫描。除了定期的工作安排之外,如何解决这个问题?
感谢您的帮助。
答案 0 :(得分:3)
对于Android 8+上的后台BLE信标扫描,您有几种选择
常规后台服务。您可以像在Android 4.3-6.x上一样使用这些文件,但是通常只能在后台运行10分钟,否则在这之后,Android将终止您的应用程序,并且将无法再进行扫描。
使用前台服务。这些工具的工作方式与Android后台服务非常相似,不同之处在于它们会显示均匀显示的通知,并带有您选择的图标来指示您的应用程序在后台运行。借助前台服务,您可以像在Android 4.3-6.x上一样,不受限制地在后台有效扫描信标。
使用基于意图的扫描。如果您只需要知道信标何时出现或消失,则可以使用蓝牙数据包过滤器为BLE设备设置基于意图的扫描,该过滤器会根据信标的字节模式或字节模式的存在进行过滤的灯塔。当信标出现或消失时,Android将向您的应用程序中的BroadcastReceiver发送一个Intent,该Intent将在后台唤醒它,并使其运行大约10分钟,然后杀死它。在这段时间内,您可以继续扫描信标。
使用职位安排程序。您可以安排作业最多在后台每隔15分钟运行一次以进行扫描。通常,作业在后台的运行时间限制为10分钟。由于开始时间相差+/- 10分钟,因此您最多可以扫描0-15分钟的时间。
使用(3)和(4)弯曲规则来玩游戏。虽然这违反了Android的精神,但您可以通过作业调度程序玩游戏,方法是立即开始作业,在10分钟后取消作业,然后重新启动。您可以通过一次又一次地触发基于意图的扫描来执行类似的操作。请注意,执行这些操作会耗尽用户的电池电量,也许会导致他们卸载您的应用程序。将来的Android版本可能会阻止此规则弯曲。
您可以阅读我的博客文章,了解这些技术的优点here。开源Android Beacon Library默认在Android 8+设备上使用技术3和4,并且如果您希望选择选项2,还支持配置前台服务。