检查用户';s位置(android应用程序)位于多边形内

检查用户';s位置(android应用程序)位于多边形内,android,android-gps,android-geofence,fusedlocationproviderapi,Android,Android Gps,Android Geofence,Fusedlocationproviderapi,我正在构建一个android应用程序(GeoFerning),其中我需要检查用户的位置是否在给定的多边形内。该应用程序可以容忍一些检测延迟,但必须是电池效率。 我目前正在做的事情如下-设置一个回调,当用户的位置改变50米(可变)时,就会触发该回调。在回调中,检查当前位置是否在多边形内,是否使用多边形中的点算法,并相应地更新共享首选项 现在,我试图通过使用谷歌的Geofence API对其进行优化,但它只适用于圆形Geofence。我是这么想的- 计算可以覆盖整个多边形的最小圆 使用Google的

我正在构建一个android应用程序(GeoFerning),其中我需要检查用户的位置是否在给定的多边形内。该应用程序可以容忍一些检测延迟,但必须是电池效率。 我目前正在做的事情如下-设置一个回调,当用户的位置改变50米(可变)时,就会触发该回调。在回调中,检查当前位置是否在多边形内,是否使用多边形中的点算法,并相应地更新共享首选项

现在,我试图通过使用谷歌的Geofence API对其进行优化,但它只适用于圆形Geofence。我是这么想的-

  • 计算可以覆盖整个多边形的最小圆
  • 使用Google的Geofence API设置一个回调,当用户进入和退出圆圈时会触发该回调
  • 当用户进入圆圈时,设置一个与当前实现类似的回调(即每50米获取一次更新,并存储校内/校外共享首选项)
  • 当用户退出循环时,移除回调

  • 因此,在这种情况下,我会避免在用户根本不在圈子中时进行更新。但是,问题是,与融合定位提供商相比,谷歌的Geofence API有多好?

    虽然我对Geofence API不太了解,但我非常相信它是基于融合定位提供商(FLP)的

    当设置地理围栏且设备记录移动时,FLP将请求位置并对照地理围栏进行检查

    Android bugreports()中可以找到这种机制的一些证据。例如,我在使用地理围栏(Galaxy S9、Android 10)时发现了以下几行:

    本质上,这意味着我的应用程序设置的地理围栏每隔30分钟以平衡精度(即wifi精度)请求一次位置。这是geofence触发器可能的最长延迟。由其他源触发的位置被动定位,最小间隔为5s

    如果位置请求未根据运动进行计时,则将自己的位置请求与多边形中的点检查结合使用可能会消耗更多电池

    Request[PRIORITY_BALANCED_POWER_ACCURACY requested=1800000ms fastest=5000ms] tag=geofencing moduleId=com.google.android.gms.location.geofencing hideAppOps=true clients=[my_app] forceCoarseLocation=false exemptFromBackgroundThrottle