当前位置: 首页 > 知识库问答 >
问题:

Android信标库:让BeaconTransmitter“永远”运行

满伟彦
2023-03-14

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

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

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

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

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

这也按预期工作,但当然,我总是在信标传输已经停止并且在它再次被WorkManager踢开之前的时隙回家。;)

一种更干净的方法是在PowerManagement/BatteryManager关闭信标发射器时“拦截”(??)什么的。有可能吗?那些covid追踪应用程序使用了某种(我希望)确保连续传输的东西,但我知道谷歌/苹果必须实现一些基本的东西才能让它们工作,当然,我不能使用covid追踪程序本身,因为它的设计是匿名的。

共有1个答案

司马宏邈
2023-03-14

具体的答案会因手机制造商而异,因为许多OEM都使用Android来杀死后台长时间运行的应用程序。关于OEM挑战的总结,请参阅此处。

对于香草Android(Pixel手机、许多诺基亚Android Once设备)、摩托罗拉甚至大多数三星设备来说,保持一个前台服务活动并拥有Location always运行时权限就足够了。我的BeaconScope应用程序使用了这种前台服务技术,我通常会看到Pixel或Samsung设备上的发射机持续运行数周。确保为应用程序授予“Always”位置权限以使其工作。

您可以在Android Beacon库的Kotlin reference应用程序中看到设置前台服务所需的代码。注释表明前景服务对于连续的信标扫描是有用的,但同样正确的是,它对于长期的信标传输是有用的。

在没有前台服务的情况下,在香草安卓上将app放到后台后,信标传输只会持续10分钟左右,这时候app就会被秒杀。

周期性工作请求或作业服务的问题在于,它们在Android上最多可以每15+/-10分钟运行一次。因此,如果发射器每隔10分钟关闭一次,那么就会有长达15分钟的空隙没有发射。在Android8+上,你别无选择,只能使用前台服务。

 类似资料:
  • 在其他语言中,此任务很简单,只需在Python中使用类似以下内容: 如果没有什么要处理的,我的程序也会想暂停执行。我不希望它用查询使数据库过载。 我正在尝试编写一个应用程序,它将充当后台队列处理器。它将检查数据库,看看队列中是否有任何需要处理的项目,然后该程序将数据写入磁盘上的文件。连接到同一数据库的不同系统的用户会间歇性地将数据添加到数据库中。 我认为永久npm模块不太合适,因为该模块只是检查脚

  • 问题内容: 有什么办法可以使这两个软件包一起运行? 因此,基本上,我希望两全其美。自动运行服务器(并在出现错误时重新启动),并在发生.js文件更改时自动更新。 问题答案: 但是要避免该问题,您可以执行以下操作: 这样可以确保实际退出(而不是给您“应用程序崩溃”消息),然后再次将其接收。 在此指定要运行的命令,否则将默认为节点。不使用-c会导致在此答案的注释中提及的错误。

  • 我正在使用PHP mongoClient类连接mongob远程主机。 除了简单的连接代码,我没有写什么特别简单的东西。 它确实连接到mongodb,但一段时间后,我的应用程序挂起,所谓挂起,是指php sript永远运行,没有响应,最后apache和我的服务器崩溃。我需要重启服务器才能重新启动。 为什么PHP脚本永远运行而mongolerver没有响应。 我将设置为30秒。 MongoClient

  • 我有一个奇怪的问题Laravel队列:工作。在我的crontab中,我设置了一个工作,就像Laravel文档中描述的那样 在我的应用程序/控制台/Kernel.php我设置这个: 在我的正式服php工匠队列中:工作运行几秒钟,然后被“杀死”。这就是我所期望的。 在我的开发盒php artisan队列中:工作永远运行。因此,激活cron作业会产生php进程,直到整个内存被填满。 两个盒子都是Cent

  • 我在上构建了一个排队系统。应用程序将为特定的生成消息,在使用者端,我必须使用为该主题生成的所有记录。 我使用新的Java使用者API编写了consumer。代码看起来像 这里我需要永远运行消费者,这样生产者推入kafka主题的任何记录都应该立即消费和处理。 所以我的困惑是,使用无限while循环(像示例代码中那样)消费数据是正确的方法吗?

  • 我对beacons非常陌生,我试图用AltBeacon Android beacon库实现对Estimote beacon的基本检测(通过Estimote iOS应用程序虚拟)。 当我激活信标时,我的应用程序检测到它,并进入“didenterregion”回调。但当我关掉信标/或离开时,“didexitregion”从来没有被调用过。 会有什么问题?