Android - 需要添加100多个地理围栏

Nai*_*tik 4 android geofencing android-geofence region-monitoring

我正在开发一个用户可以设置多个位置的应用程序.当用户使用GeoFencing进入或离开特定区域时,我成功显示通知.

现在,我需要为所有已保存的位置提供监控,而且可能需要数百个甚至更多.我已经阅读了给定的链接"您可以拥有多个活动地理围栏,每个设备用户的限制为100个."

有没有办法为每个设备用户添加100多个地理围栏?

谢谢!

Ren*_*rio 18

  1. 拥有一个ArrayList,其中包含您要监控的所有地理围栏+100.
  2. 收听位置更新.
  3. 当您获得位置更新时,如果所有地理围栏的ArrayList超过100,请删除所有受监控的地理围栏,然后使用harvesine公式计算100个最近的地理围栏:

    public static final double R = 6372.8; // In kilometers
    
    public static double haversine(double lat1, double lon1, double lat2, double lon2) {
      double dLat = Math.toRadians(lat2 - lat1);
      double dLon = Math.toRadians(lon2 - lon1);
      lat1 = Math.toRadians(lat1);
      lat2 = Math.toRadians(lat2);
    
      double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2);
      double c = 2 * Math.asin(Math.sqrt(a));
      return R * c;
    }
    
    Run Code Online (Sandbox Code Playgroud)

    这将为您提供两个位置之间的距离.之后,您可以将该距离与地理围栏区域半径进行比较,以了解是否在该区域内.

注意:如果半径为米,则此距离将以千米为单位,然后将半径方法结果乘以1000,以便将其转换为米.

参考

  1. 开始监控100个最近的地理围栏的结果列表.

这样您就可以根据您的位置始终监控最近的100个地理围栏.能够监测100多个,因为它将监测地理围栏区域始终改为100个最近的地理围栏区域.

  • 除了使用Haversine,您还可以使用内置函数Location.distanceBetween(),它使用WGS84 椭球算法。 (2认同)