Geofence - 触发“GEOFENCE_NOT_AVAILABLE”的问题

问题描述 投票:0回答:3

我做的应用程序使用地理围栏,自从我开始使用它后,我开始广播接收转换,当我关闭 GPS 位置时,我收到代码为 GEOFENCE_NOT_AVAILABLE 的警报,我启动了一项服务以在我打开时重新注册地理围栏全球定位系统。 现在我休息了几天,当我关闭 GPS 时,我的 broadcastReceiver 突然没有收到警报。我不明白为什么? *当我进入/退出位置时(就像我在地理围栏初始化中定义的那样)我触发了警报,问题就在触发 GEOFENCE_NOT_AVAILABLE 警报时。

如果有人能帮助我我会很高兴

android android-pendingintent geofencing android-gps android-geofence
3个回答
0
投票

对于在 Android 11(API 30,即使构建时针对 API 29 或更低版本)上运行应用程序时遇到此问题的任何人,确认这是预期行为,因为 Android 操作系统在位置服务关闭时不再注销地理围栏。

然而,当定位服务关闭时,您仍然无法注册地理围栏,因此必须检查它们的可用性,并在需要注册新服务时提示用户打开它们。之前注册过的不需要重新注册

关于如何在运行 Android 10 或更早版本的设备上发生这种情况,没有给出相关信息,一些开发人员也报告了这一点。但可以肯定的是,至少在某些版本的 Android 操作系统(取决于设备制造商)中更早地引入了更改似乎是安全的。如果最初的问题提到这个问题是否仅在某些 API 上,那将非常有帮助,但我想由于它的年龄,它与 Android 11 无关。如果有人在较低的 API 上遇到过这个问题,可以测试他们是否旧的地理围栏仍然注册并可用,我很乐意相应地更新答案。

资料来源: https://issuetracker.google.com/issues/143967408

更新: 正如 Stephen Ruda 所提到的,它似乎不依赖于 Android 操作系统版本,而是依赖于 Google Play 服务版本。这使得这种行为完全不可预测。


0
投票

当未向应用程序授予精确位置权限时,我们会收到 GEOFENCE_NOT_AVAILABLE 错误。 检查是否启用了以下选项,这里我指的是android 13 OS:

  1. 设置->应用程序->你的应用程序->权限->位置->使用精确位置(打开)
  2. 设置->定位->定位服务->谷歌定位精度(开启)

这应该可以解决 GEOFENCE_NOT_AVAILABLE 错误


-1
投票

GEOFENCE_NOT_AVAILABLE 是一个预期的错误代码,让您知道位置适配器已关闭并且位置(和地理围栏)将不再被跟踪。

一旦再次可用,您的地理围栏将处于活动状态,您将获得所需的回调。

触发器没有发生的几个原因:

  1. 检查您在地理围栏请求中设置的到期时间戳是否仍然有效。
  2. 你的设备重启了吗?如果是,则需要重新注册 fences。 (参考文档:仅在需要文档时重新注册地理围栏

  3. 您的位置是否在设备设置中设置为高精度模式?

  4. 重新注册围栏时,请先取消注册,然后再重新注册。

  5. 打开谷歌地图并检查它是否显示正确的位置。

© www.soinside.com 2019 - 2024. All rights reserved.