地理围栏 API 触发器已在区域中时进入事件
Posted
技术标签:
【中文标题】地理围栏 API 触发器已在区域中时进入事件【英文标题】:Geofencing API triggers enter event when already in zone 【发布时间】:2013-06-28 09:29:58 【问题描述】:我在使用最新的 android Geofence API 时遇到了这个问题。用法与示例用法完全相同。我设置了Geofence.GEOFENCE_TRANSITION_ENTER
类型的地理围栏,半径为 500m,过期时间为Geofence.NEVER_EXPIRE
。这工作正常,但如果我在纬度经度约 10 米处设置地理围栏,它会立即触发。
所以我在这里理解Geofence.GEOFENCE_TRANSITION_ENTER
这个词是不是错了,它不应该只在我们在区域外并进入它时触发,而不是在我们已经在区域内时触发吗?
谢谢。
【问题讨论】:
可能是gps信号的准确度和精度:gis.stackexchange.com/questions/8650/… 精度足够好,Location distanceTo在该点显示200m,所以在500m区域内。 也许这就是原因:输入 = 外部地理围栏状态 => 内部地理围栏状态或地理围栏状态未知 => 内部地理围栏状态。添加地理围栏后,它的状态是未知的。 有什么解决办法吗? 【参考方案1】:好吧,想想 3D 对象的地理围栏:空间二维,时间一维。 在检查之间,如果地理围栏被击中,您的新围栏就会移动到位。
但是,我只是保存添加栅栏的时间戳,然后在几秒钟内忽略所有命中。
【讨论】:
你能简单解释一下吗?我也面临同样的问题。【参考方案2】:如果您有以下设置,如果您在围栏内,地理围栏将在创建后立即触发。
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER);
但是,这也是默认设置,因此触发仍然会发生。将触发器设置为 INITIAL_TRIGGER_DWELL 确实会阻止初始触发器触发:
指示地理围栏服务应在添加地理围栏时触发 GEOFENCE_TRANSITION_DWELL 通知并且设备已经在该地理围栏内一段时间的标志。
我的测试设备已经在同一个位置放置了一个多小时,而这并没有触发那个地理围栏。
【讨论】:
或者简单地使用 0(零)作为参数来禁用初始触发器 ;-) 有趣,0 没有记录。反正现在已经太晚了,所以我什至无法尝试! 是的,它没有记录。但是,由于您可以使用 (EXIT | ENTER) 按位组合 EXIT 和 ENTER,并且这些标志具有 2^n 个值(ENTER = 1,EXIT = 2,DWELL = 4),因此值 0 表示无字面意思是合乎逻辑的其中;-) 我验证将 0 作为参数禁用初始触发器。这种行为是合乎逻辑的,应该记录在案。在许多用例中,我们希望禁用初始触发器。 更新现在记录了将初始触发器设置为 0 将禁用初始触发器【参考方案3】:对不起,如果我要恢复一个老问题,但由于我在找到正确答案之前使用了这个答案,所以我将把它留在这里。
GeofencingRequest.Builder 包含一个可以解决此问题的方法 (setInitialTrigger)。
https://developers.google.com/android/reference/com/google/android/gms/location/GeofencingRequest.Builder.html#setInitialTrigger%28int%29
【讨论】:
【参考方案4】:地理围栏不会仅在越过边界时触发。当您在栅栏内的任何地方被检测到并且之前没有发送过任何进入事件时,它们就会被触发。
另请注意,当您在其中更新地理围栏(再次添加具有相同 ID 的地理围栏)时,您将收到另一个进入事件,因为它会在更新时清除地理围栏的状态。
【讨论】:
【参考方案5】:这可能会有所帮助:https://developers.google.com/events/io/sessions/325337477 在演示幻灯片(页面底部的链接)中,GPS 的精度约为 10 米。
【讨论】:
没有帮助,仍然没有解释为什么在我们已经在半径范围内时添加输入类型地理围栏时会触发它。 我没有找到该行为的文档(当应用在区域内启动时触发输入转换)。但它实际上适用于我的情况,因为我想知道我第一次启动应用程序时是否在该地区。以上是关于地理围栏 API 触发器已在区域中时进入事件的主要内容,如果未能解决你的问题,请参考以下文章
Android Geofences (Location Services) - 如何触发应用内事件