地理围栏随机无法触发,直到另一个GPS应用程序被打开。

7
我已经测试了一个应用程序多个月,该应用程序使用Android Geofencing API来跟踪进入/退出事件。它的运行表现几乎完美,但有时地理围栏简单地不触发,这显然不是由于我的应用程序未能保持地理围栏加载导致的。因为每当地理围栏失败时,立即打开另一个完全独立的GPS应用程序(例如谷歌地图)会使我的应用程序触发它未能触发的地理围栏事件。
我通过BOOT_COMPLETED和location.PROVIDER_CHANGED上的广播接收器处理围栏的重新加载。围栏半径相当大,超过1英里。该应用程序没有被挂起或处于电源管理状态。用户和个人测试表明,这绝不是手动禁用位置服务引起的。不存在停留并且围栏永不过期。
正如我所说,99%的时间地理围栏工作得非常完美,而其他1%只需打开另一个GPS应用程序即可立即触发围栏。我正在尝试找出可以消除这1%故障的方法,希望能避免不断轮询位置(这样做会使地理围栏API变得毫无意义)。
更新:(样本测试数量有限,只有1个)在运行Android Oreo的设备上,这个问题似乎已经恶化到除非启动第二个GPS应用程序,否则地理围栏永远不会被触发...
1个回答

2

我不知道这是否能帮助任何人,但从Android O开始的背景限制中,地理围栏的工作方式与您描述的相同,只有获取用户当前位置的应用程序才会触发地理围栏。

您可以创建一个前台服务并轮询来自Fused Location Provider的位置,以使地理围栏实际起作用。

希望有人能找到更好的解决方案。

Original Answer翻译成"最初的回答"


请问您能分享一份样例代码吗?我正在尝试接收地理围栏触发器,即使应用被杀死(活动被滑掉)。我正在使用BroadcastReceiver方法,并使用PendingIntent.getBroadcast,但仅在应用处于后台时起作用(未被杀死)。如果它已被杀死,只有当我打开其他应用程序,例如Google Maps时,它才会起作用。 - fernandospr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接