Android 在半径范围内添加带有设备的geofence时,从未收到geofence暂停事件
我使用Android 在半径范围内添加带有设备的geofence时,从未收到geofence暂停事件,android,android-location,android-geofence,android-googleapiclient,Android,Android Location,Android Geofence,Android Googleapiclient,我使用LocationServices.getFusedLocationProviderClient和LocationServices.getGeofencingClient制作了一个简单的测试应用程序,设置了位置和地理围栏监控 我仅使用暂停过渡通知和初始触发器添加了一个地理围栏,位置和半径都正确,因此我在添加地理围栏后很快就会看到“暂停”事件: geofenceBuilder.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_DWELL); ...
LocationServices.getFusedLocationProviderClient
和LocationServices.getGeofencingClient
制作了一个简单的测试应用程序,设置了位置和地理围栏监控
我仅使用暂停过渡通知和初始触发器添加了一个地理围栏,位置和半径都正确,因此我在添加地理围栏后很快就会看到“暂停”事件:
geofenceBuilder.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_DWELL);
...
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL);
在设备日志中,我注意到这两种情况中的几个,每次获得位置时:
地理围栏未决意图从未触发。设备在我桌上
我不明白发生了什么事。我甚至试着切换到谷歌地图并切换回应用程序,但它什么也没做。由于我正在使用该设备,因此该设备显然没有进入深度睡眠状态。那么,什么是深度睡眠呢?我猜谷歌Play服务中有一些地理围栏组件?但是这个位置一直被应用程序查询,那么为什么谷歌Play服务GeoFenging没有看到我在这个位置并发送“驻留”事件呢
在我用设备在房子里四处走动之后,两个日志条目不再出现,我得到了GeoFenging驻留事件
我的结论是,当设置地理围栏时,如果device\Android组件处于这种“睡眠”模式,我不认为地理围栏事件不会触发,至少不会按照我的测试触发“暂停”,因为我写这篇文章时,我还没有测试是否调用了“回车”
“深度睡眠模式”和“GeofencerStateMachine”是什么?它是来自安卓谷歌游戏服务吗?它是如何工作的?我没有参加“暂停”活动的原因是什么
在另一台设备(三星Galaxy)上,我看到了相同的行为,没有接收到驻留事件,但没有类似的“深度睡眠”日志条目,移动设备不会使其接收到“驻留”事件……
我正在记录设备坐标,我可以清楚地看到精度在10左右,但没有发送暂停事件
更新:我把设备放在桌子上大约40分钟。返回,打开应用程序,启动geofence,再次,没有收到驻留事件,现在甚至没有日志事件显示“位置已删除,因为处于深度静止模式”。。。我迷路了
更新2:即使在重新安装应用程序后,也不会使暂停或输入事件被接收(我还添加了对“输入”的监控)注意:暂停事件仅在您注册时不在地理围栏内时发生,如果您在注册后进入地理围栏内,它将起作用。
你也可以试着用假gps来测试这一点,并不断地改变位置,一直为我工作。
我尝试了以下解决方案,两者都对我有效
第一种解决方案与您的情况相同,因为您只希望有驻留事件
builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL);
builder.setLoiteringDelay(500);
you also have to add this method(time in millis)
第二种解决方案适用于希望所有三个事件“进入”、“停留”和“退出”的人
按照代码片段进行操作
// 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);
希望这对你们也有帮助。
如果有人需要,我可以提供完整的工作解决方案,请发表评论。您是否了解这是什么“深静模式”?同样的事情也发生在梅诺普身上。API是偶然的,你得到的一些结论可能是非常错误的