如何在Android地理围栏中实现“un-dwell”?

2022-09-03 16:07:28

我在理解Android的地理围栏方面遇到了问题。

实际问题:我使用了来自google的geofence-api的+事件,但在许多设备上,信号非常不准确,以至于它会跳进跳出围栏(跳跃通常大于半径400m)。EnterExit

计划的解决方案:所以我想用它来“平滑”这个。如果该位置在围栏内停留一分钟,则会发生停留。目前为止,一切都好。但是,如何检测栅栏的离开呢?当我使用时,由于这些信号跳跃,可能会发生一些。我需要的是一种“不适”,当我离开地理围栏超过一分钟时。DwellExitExit

我想避免使用自定义逻辑重新实现整个Geofence,该逻辑在快速重复的地理位置上注册并过滤掉小的异常值。

问题:地理围栏-api中是否有某些东西可以实现“不适”?或者是否有最佳实践如何检查是否是真正的出口?Exit


答案 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;
    }

答案 2

在 Google 地理围栏中,每次输入地理围栏时都会触发 Enter 事件,每次您跨越地理围栏边界时都会触发 Exit 事件。此外当您在地理围栏内停留指定的时间间隔时,也会触发停留事件。

在你的情况下,如果你在不到一分钟的时间内不断跳进跳出地理围栏,那么Dwell将永远不会发生。

如果您进入地理围栏,Enter事件触发,然后您在里面停留一分钟或更长时间,则Dwell将发生,并且在Dwell发生后,如果您注意到任何Exit事件,则可以将该Exit事件用作真正的Exit。

注意:您还可以增加地理围栏的半径。

我希望我的答案能清楚地告诉你。:)


推荐