Android信标库:保持BeaconTransmitter运行”;“永远”;

Android信标库:保持BeaconTransmitter运行”;“永远”;,android,kotlin,android-workmanager,ibeacon-android,batterymanager,Android,Kotlin,Android Workmanager,Ibeacon Android,Batterymanager,有没有办法让BeanContransmitter实例永远发送 问题是: 当我回家时,我需要一个RPi检测,不受Wifi运行的影响,或者RPi甚至可以访问互联网(例如,当它检测到手机时,它可以打开所有路由器等) 我的android手机上有一个极简主义的应用程序,发送一个正在运行的iBeacon,RPi上的beacontools库会检测到它。原则上,这是行之有效的。(虽然我知道这应该是另一种方式,但我还是希望RPi能够在不接入互联网的情况下做“事情”,这是手机无法做到的) 然而,安卓手机上的电源管理

有没有办法让BeanContransmitter实例永远发送

问题是: 当我回家时,我需要一个RPi检测,不受Wifi运行的影响,或者RPi甚至可以访问互联网(例如,当它检测到手机时,它可以打开所有路由器等)

我的android手机上有一个极简主义的应用程序,发送一个正在运行的iBeacon,RPi上的beacontools库会检测到它。原则上,这是行之有效的。(虽然我知道这应该是另一种方式,但我还是希望RPi能够在不接入互联网的情况下做“事情”,这是手机无法做到的)

然而,安卓手机上的电源管理(?)似乎停止了传输,最新一次是在几个小时后(即使应用程序“没有优化”电池使用)。我甚至不确定这是因为电池优化还是其他原因

迄今为止的解决办法: 我正在使用PeriodicWorkRequest,每30分钟检查一次(我在某个地方读到这是最短时间),如果信标仍在运行,则重新启动它(如果没有)

这也如预期的那样起作用,但当然,我会在信标传输停止的时间段和工作经理再次启动之前回家

一个更干净的方法是在BeanContransfitter被PowerManagement/BatteryManager(??)或其他东西杀死时进行“拦截”。可能吗?
那些新冠病毒追踪应用程序正在使用(我希望)确保持续传输的东西,但我知道谷歌/苹果必须实现一些基本的东西才能让它们工作,当然,我不能使用新冠病毒追踪系统本身,因为它是匿名的。

确切的答案将因手机制造商而异,因为许多OEM的fork Android会在后台杀死长时间运行的应用程序。请参见此处,以获取由提供的挑战摘要

对于香草安卓(像素手机、许多诺基亚安卓Once设备)、摩托罗拉甚至大多数三星设备,只要保持前台服务处于活动状态并具有“位置始终”运行时权限就足够了。我的应用程序使用这种前台服务技术,我通常会看到一个发射机在像素或三星设备上持续运行数周。请确保您为应用程序授予“始终”位置权限,以使其正常工作

您可以在中看到为Android Beacon库设置前台服务所需的代码。评论指出,前景服务对于连续信标扫描很有用,但对于长期信标传输也同样有用

如果没有前台服务,应用程序在香草安卓系统上被放到后台后,信标传输只会持续大约10分钟,届时应用程序将被终止


定期工作请求或作业服务的问题在于,它们最多可以在Android上每15+/-10分钟运行一次。因此,如果每10分钟关闭一次发射机,那么在没有传输的情况下,将出现长达15分钟的间隔。在Android 8+上,您别无选择,只能使用前台服务。

看起来正是我所需要的。我会深入研究,看看是否有效。