【问题标题】:Android Beacon Library: Keep BeaconTransmitter running "forever"Android Beacon 库:让 BeaconTransmitter “永远”运行
【发布时间】:2021-03-15 14:38:49
【问题描述】:

有没有办法让 BeaconTransmitter 实例永远发送?

问题: 我想要一个 RPi 检测我何时回家独立于 Wifi 运行或 RPi 甚至可以访问互联网(例如,当它检测到手机时,它可以打开所有路由器等)。

我的 android 手机上有一个简约的应用程序,它发送 iBeacon 正在运行,RPi 上的 beacontools 库检测到它。这在原则上运作良好。 (虽然我知道它应该是相反的,但我再次,我希望 RPi 能够在没有访问互联网的情况下做“事情”,而手机不能做)。

但是,Android 手机上的电源管理 (?) 似乎停止了传输,最近一次是在几个小时后(即使应用程序“未针对电池使用进行优化”)。我什至不确定这是因为电池优化还是其他原因。

目前的解决方案: 我正在使用 PeriodicWorkRequest 每 30 分钟检查一次(我在某处读到这是最短时间),如果信标仍在运行并重新启动它,如果不是。

这也可以按预期工作,但是当然,我会在信标传输停止并且在 WorkManager 再次启动之前一直回到家中。 ;)

当 BeaconTransmitter 被 PowerManagement/BatteryManager(??) 或其他东西杀死时,一种更简洁的方法是“拦截”。那可能吗? 那些covid跟踪应用程序正在使用(我希望)确保持续传输的东西,但我知道谷歌/苹果必须实施一些基本的东西才能让它们工作,当然,我不能使用covid-tracking本身,因为它是匿名的按设计。

【问题讨论】:

    标签: android kotlin android-workmanager ibeacon-android batterymanager


    【解决方案1】:

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

    对于普通 Android(Pixel 手机、许多诺基亚 Android Once 设备)、摩托罗拉甚至大多数三星设备,保持前台服务处于活动状态并始终拥有位置运行时权限就足够了。我的BeaconScope 应用程序使用这种前台服务技术,我通常会看到发射器在 Pixel 或三星设备上持续运行数周。请务必向应用授予“始终”位置权限以使其正常工作。

    您可以在Kotlin reference app 中为 Android 信标库查看设置前台服务所需的代码。 cmets 表明前台服务对于连续信标扫描很有用,但同样适用于长期信标传输。

    在没有前台服务的情况下,信标传输只会在应用程序在原生 Android 上被置于后台后持续大约 10 分钟,此时应用程序将被终止。

    周期性工作请求或工作服务的问题在于它们在 Android 上最多每 15 +/- 10 分钟运行一次。因此,如果发射器每 10 分钟被终止一次,您最终会出现长达 15 分钟的间隙而没有传输。在 Android 8+ 上,您别无选择,只能使用前台服务。

    【讨论】:

    • 看起来正是我所需要的。将深入研究它,看看它是否有效。
    猜你喜欢
    • 2015-06-17
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2021-06-18
    相关资源
    最近更新 更多