我对了解Androids geofences有一个问题。
实际问题:我使用了来自googles geofence-api的Enter
+ Exit
个事件,但在许多设备上,信号非常不准确,无法跳入和跳出围栏(跳跃经常大于半径400米。)
计划解决方案:所以我想使用Dwell
来"平滑"这个。如果位置在栅栏内保持一分钟,则会发生停留。到现在为止还挺好。但是如何检测围栏的离开?当我使用Exit
时,由于那些signaljumps,可能会发生几个Exit
。当我离开地理围栏超过一分钟时,我需要的是一种“不适应的”。
我希望避免使用在快速重复的地理位置上注册的自定义逻辑重新实现整个Geofence,并过滤掉小的异常值。
问题:geofence-api中是否有某些内容可以实现" #well;#34;?或者是否有最佳实践如何检查Exit
是否真正退出?
答案 0 :(得分:1)
public long lastEnterTime = 0;
public void initTimer(){
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if(lastEnterTime!=0 && System.currentTimeMillis() > lastEnterTime + 1000*60){
lastEnterTime = System.currentTimeMillis();
onRealEnter();
}
}
},0,1000);
}
public void onRealEnter(){
}
public void onEnter(){
lastEnterTime = System.currentTimeMillis();
}
public void onExit(){
lastEnterTime = 0;
}
答案 1 :(得分:1)
在Google Geofences中,每次输入地理围栏时输入事件触发器,每次越过地理围栏的边界时,退出事件触发器。当您在地理围栏内停留指定的时间间隔时,暂停事件也会触发。
在你的情况下,如果你在不到一分钟的时间内继续跳进地理围栏,就永远不会发生。
如果您输入地理围栏,输入事件触发器,然后您在内部停留一分钟或更长时间,暂停将会发生,并且在Dwell发生后,如果您注意任何退出事件,您可以将该Exit事件用作真正的退出。
注意:您还可以增加地理围栏的半径。
我希望你的回答很清楚。 :)
答案 2 :(得分:1)
这只是一个想法,但是对于每个区域,您都可以注册两个半径不同的地理围栏。注册以收听DWELL用于半径较小的地理围栏,以及另一个用于EXIT。
答案 3 :(得分:0)
你可以使用setNotificationResponsiveness
来设置更长的通知时间,这样你就不会得到一个退出事件,除非它在那段时间内保持在栅栏之外,所以跳转不会触发退出事件它们发生在这段时间内