根据Android's documentation on geofences,地理围栏应该在用户针对所请求的请求进入,居住或退出地理围栏时触发。

但是,如果要自己测试地理围栏功能,则只有在应用请求用户位置时,地理围栏才会触发。只需使用教程代码并将设备移至地理围栏将不会触发地理围栏。我必须打开Goog​​le地图或其他要求用户位置的应用程序,我假设这会通知Google Play服务,然后触发我的地理围栏。这真的是地理围栏的设计方式吗?证明这是我从this answer中找到的地理围栏的工作方式。 (注意:我还在该链接中使用广播接收器,如接受的答案。除非在地理围栏内提出了位置请求,否则接收器不会触发。)

我不想有一个持久的后台服务每5分钟询问一次用户的位置,只是为了触发广播接收者。我曾想过要听系统意图,例如用户打开屏幕,断开与wifi的连接等,这会触发我要求用户提供位置的服务。但是,在我的应用程序或其他应用程序没有额外需要更新用户位置的情况下,地理围栏系统是否应该本机触发?

最佳答案

如此答案https://stackoverflow.com/a/54436709/1505074所述,您需要更改示例代码以使用广播接收器而不是服务。这样,地理栅栏基本上可以工作,但有一些警告。您的等待时间取决于API级别,制造商以及设备状态。打开设备时,通常会遇到击剑事件。要真正评估围栏事件,您需要具有网络日志记录服务并进行更复杂的分析。

您自己的Geofence触发器的问题在于,如果您不使用会耗尽电池电量的前台服务,则每小时只能在后台进行一次真实位置更新,大约每小时4次。如果不使用,即使您在后台,即使使用位置更新回调,您也只会获得最后一个位置。

Transistorsoft已经创建了一个库来处理后台位置跟踪的不同方法,您可以在其中找到许多方法,但是需要付费:https://github.com/transistorsoft/background-geolocation-lt

08-26 02:33