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是偶然的,你得到的一些结论可能是非常错误的