我使用LocationServices.getFusedLocationProviderClient
和LocationServices.getGeofencingClient
创建了一个简单的测试应用,设置位置和地理围栏监控。
我使用驻留转换通知和初始触发器添加了地理围栏,使用了正确的位置和半径,以便在添加地理围栏之后很快就会发生'停留'事件:
geofenceBuilder.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_DWELL);
...
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL);
在设备日志中,我注意到这两个中的几个,每次获得位置:
从未触发过地理围栏未决意图。设备在我的桌子上。
我不明白发生了什么。我甚至试图切换到谷歌地图并切换回应用程序,它没有做任何事情。自从我使用它以来,该设备显然没有任何深度睡眠。深睡的是什么?我猜测Google Play服务中的一些地理围栏组件?但该应用程序不断查询该位置,那么为什么Google Play服务地理围栏不会看到我在该位置内并发送“停留”事件?
在我用设备移动房子后,两个日志条目不再出现了,我得到了地理围栏停留事件!
我的结论是,当设置地理围栏时,如果设备\ Android组件处于此“睡眠”模式,我不认为地理围栏事件不会触发,至少不是我的“居住”测试,正如我写的那样,我没有测试是否调用'enter'。
这是什么“深度睡眠模式”和“GeofencerStateMachine”?它来自Android Google Play服务吗?它是如何工作的?我没有得到“停留”事件的原因是什么?
在另一台设备(三星Galaxy)上我看到相同的行为,没有收到停留事件,但是没有类似的日志条目带有“深度睡眠”并且移动设备并不会使其接收到'停留' '事件......
我正在记录设备坐标,我可以清楚地看到准确度大约为10但是,暂停事件没有被发送。
更新:我将设备放在桌面上40分钟。回来,打开应用程序,启动地理围栏,再次,没有收到停留事件,现在甚至没有日志事件说“位置因为在深静止模式下降了”......我迷路了......
更新2:即使在重新安装应用程序后,它也没有收到停留时间和输入事件(我还添加了对'enter'的监控)
答案 0 :(得分:1)
我尝试了以下解决方案,并且都为我工作。
第一种解决方案与您的情况相同,因为您只想进行驻留事件。
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);
希望这对你们也一样。 如果有人需要,我可以提供完整的工作解决方案,请发表评论。