10

我即将使用地理围栏实现一项功能,在完成任何认真的工作之前,我需要知道地理围栏在第一次转换后是否保持活动状态。

该功能的核心是:

每次我在点 P 的 x 米范围内(称为此区域 A)时,我都希望动作 B发生。

我需要知道的是

  • 我是否只需要添加一个地理围栏Geofence.NEVER_EXPIRE并放心,无论经过时间、重新启动等如何,每次进入指定区域时我都会得到一个 PendingIntent

或者

  • 我是否必须在离开 A 区后重新注册此地理围栏才能在下次进入A 区时收到通知?

我希望是前者

4

4 回答 4

10

好的提议是第一个。如果您使用标志 NEVER_EXPIRE 作为过期时间创建地理围栏,则在触发时(通过进入或退出)您不必重新注册它。我 100% 确定这一点,我现在刚刚完成了关于地理围栏的 POC 编码和测试。

从文档中,删除地理围栏的唯一方法是达到到期时间或被设备本身删除。

到期时间

地理围栏应保持活动状态的时间。到达到期时间后,定位服务将删除地理围栏。大多数情况下,您应该指定过期时间,但您可能希望为用户的家或工作地点保留永久性地理围栏。

要停止地理围栏监控,请删除地理围栏本身

于 2013-07-24T09:36:28.680 回答
4

请记住,即使在用户卸载应用程序后,如果应用程序没有卸载它们,NEVER_EXPIRE 也会导致地理围栏被注册。没有办法删除这些。曾经。所以他们会不断消耗电池。因此,建议设置过期时间并再次设置地理围栏,以防它们在您希望它们到期之前过期。

于 2013-07-31T08:28:35.643 回答
1

请注意,在这种情况下“所有注册的地理围栏都将被删除” 即当用户禁用位置是他的手机设置时)。

请注意:该文档的顶部是警告“此类已弃用。使用 LocationServices。”

于 2014-11-27T14:23:03.713 回答
1

虽然无论您进入/退出地理围栏多少次,您都会获得待处理的意图(转换),但问题是设备重启将删除您的所有地理围栏。因此,在设备重启的情况下,您必须使用广播接收器再次重新注册所有地理围栏(您将通过共享首选项保存)并设置意图过滤器操作

android.intent.action.BOOT_COMPLETED

和许可:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

在 AndroidManifest.xml 中。

另外请记住,即使 Google Play 服务被杀死+重新启动/升级,系统也会恢复地理围栏,但如果您清除其数据则不会。在“仅在需要时重新注册地理围栏”部分下的开发人员文档中也提到了这一点

另请注意,如果用户切换或关闭位置/gps 设置,所有地理围栏将被删除,并由提供的待处理意图生成意图。在这种情况下,hasError() api 将返回 true,而 getErrorCode() api 将返回 GEOFENCE_NOT_AVAILABLE。

于 2016-02-23T06:27:13.260 回答