在半径范围内添加地理围栏时,从未收到地理围栏停留事件

时间:2018-05-12 11:37:48

标签: android android-location android-geofence android-googleapiclient

我使用LocationServices.getFusedLocationProviderClientLocationServices.getGeofencingClient创建了一个简单的测试应用,设置位置和地理围栏监控。

我使用驻留转换通知和初始触发器添加了地理围栏,使用了正确的位置和半径,以便在添加地理围栏之后很快就会发生'停留'事件:

geofenceBuilder.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_DWELL);
...
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL);

在设备日志中,我注意到这两个中的几个,每次获得位置:

enter image description here

从未触发过地理围栏未决意图。设备在我的桌子上。

我不明白发生了什么。我甚至试图切换到谷歌地图并切换回应用程序,它没有做任何事情。自从我使用它以来,该设备显然没有任何深度睡眠。深睡的是什么?我猜测Google Play服务中的一些地理围栏组件?但该应用程序不断查询该位置,那么为什么Google Play服务地理围栏不会看到我在该位置内并发送“停留”事件?

在我用设备移动房子后,两个日志条目不再出现了,我得到了地理围栏停留事件!

我的结论是,当设置地理围栏时,如果设备\ Android组件处于此“睡眠”模式,我不认为地理围栏事件不会触发,至少不是我的“居住”测试,正如我写的那样,我没有测试是否调用'enter'。

这是什么“深度睡眠模式”和“GeofencerStateMachine”?它来自Android Google Play服务吗?它是如何工作的?我没有得到“停留”事件的原因是什么?

在另一台设备(三星Galaxy)上我看到相同的行为,没有收到停留事件,但是没有类似的日志条目带有“深度睡眠”并且移动设备并不会使其接收到'停留' '事件......

我正在记录设备坐标,我可以清楚地看到准确度大约为10但是,暂停事件没有被发送。

更新:我将设备放在桌面上40分钟。回来,打开应用程序,启动地理围栏,再次,没有收到停留事件,现在甚至没有日志事件说“位置因为在深静止模式下降了”......我迷路了......

更新2:即使在重新安装应用程序后,它也没有收到停留时间和输入事件(我还添加了对'enter'的监控)

1 个答案:

答案 0 :(得分:1)

注意:仅在注册时您还没有进入地理围栏时才会发生驻留事件,如果您在注册后走入地理围栏内,则将起作用。

您也可以尝试使用伪造的gps进行测试,并不断更改位置,这一直为我服务。

我尝试了以下解决方案,并且都为我工作。

第一种解决方案与您的情况相同,因为您只想进行驻留事件。


builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL);

builder.setLoiteringDelay(500);
you also have to add this method(time in millis)

第二个解决方案是谁想要拥有三个事件“ ENTER”,“ DWELL”和“ EXIT”

遵循代码段

// Register your initial trigger with both 'ENTER' & 'DWELL' events
.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER | GeofencingRequest.INITIAL_TRIGGER_DWELL);

//and then set transition types for all three events

.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_DWELL |
 Geofence.GEOFENCE_TRANSITION_EXIT);


//dont forget to add the setLoiteringDelay, in millis

.setLoiteringDelay(5000);

希望这对你们也一样。 如果有人需要,我可以提供完整的工作解决方案,请发表评论。