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

时间:2018-07-10 12:20:20

标签: android location background-process geofencing google-location-services

我已经测试了一个使用Android Geofencing API来跟踪进入/退出事件的应用程序,已经有好几个月了。大约99%的时间它都可以正常工作,但是在某些情况下,地理围栏根本不会触发。

不能是由于我的应用程序无法保持地理围栏加载而导致的问题,因为每当围栏触发失败时,打开一个完全独立的GPS应用程序(例如Google地图)会立即导致我的应用程序触发了失败的地理围栏事件。

  • 我正在通过BOOT_COMPLETED和location.PROVIDER_CHANGED上的广播接收器来处理栅栏的重新加载。
  • 围栏半径相当大,超过1英里。
  • 该应用处于睡眠状态或处于电源管理状态。
  • 用户和个人测试表明,这绝不是因为手动禁用了位置服务。
  • 没有人居住,围栏永不过期。

正如我所说,地理围栏在99%的时间内都能正常工作,而另外1%的人仅打开另一个gps应用程序便立即触发围栏。我正在尝试找出可以消除失败的1%的方法,希望该方法缺少不断轮询的位置(这使得地理围栏api毫无意义)。

更新:(有限的测试样本大小为1)在运行Android Oreo的设备上,这个问题似乎加剧了,除非启动辅助gps应用程序,否则地理围栏永远不会触发...

1 个答案:

答案 0 :(得分:0)

我不知道这是否对任何人都有帮助,但是从Android O开始的背景限制,地理围栏就如您所描述的那样工作,只有打开获取用户当前位置的应用程序才会触发地理围栏。

您可以创建一个Foreground服务,并从“融合的位置提供程序”中轮询该位置,以使地理围栏真正起作用。

我希望其他人找到更好的解决方案。