如何将应用程序可用性限制在某个地理区域ANDROID

时间:2016-04-29 04:55:17

标签: gps area geography boundary

我想定义一个地理边界,应用程序将拒绝工作。我已经知道如何使用由两个纬度/长对绑定的方形来做到这一点:

 if ((dLAT.doubleValue() > 35.309171) || (dLAT.doubleValue() < 35.226442) || (dLON.doubleValue() < -92.790165) || (dLON.doubleValue() > -92.707081))
    {
        LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this);

        localBroadcastManager.sendBroadcast(new Intent("killapp"));
    }

我也知道地理围栏......或者足以知道通过地理围栏,区域被定义为从单点开始具有半径的圆圈。

但就像我说的那样,我想定义一个与现实相匹配的边界:

例如,如果某个应用程序设计为在用户位于堪萨斯州边界之外不起作用,则定义RADIUS并不令人满意,因为堪萨斯州不是圆形的,其边界是蠕动。

我碰巧正在使用Android,但我怀疑这个问题真的很重要。

感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

这比人们想象的容易得多:

将区域定义为多边形,在经度,纬度坐标中有N个点。

在多边形方法中使用点:

Point in Polygon Algorithm

测试当前点是否位于多边形外部, 上面的代码使用x,y坐标。 只需使用经度而不是x和纬度作为y 当区域穿过北极或南极时,以及当它穿过基准限制(经度的边界= -180到180)时,代码可能不起作用,但没有人在那里使用你的应用程序。

Altough不能总是使用公式desigend在x,y(笛卡尔)平面上工作,它在这里适用于球面lat,lon,坐标。

答案 1 :(得分:1)

以下是有关如何获取设备当前位置并注册新位置更新的官方文档:http://developer.android.com/training/location/receive-location-updates.html

获得当前位置后,您可以使用Location.distanceTo(Location)Location.distanceBetween(double, double, double, double, float[])检查设备是否在指定范围内。

答案 2 :(得分:1)

也许使用Geocoder根据当前位置提取城市/州名称,this答案可能会帮助您了解如何做到这一点。

因此,如果不允许使用城市/州名称,则关闭应用程序并显示消息。

但请注意Geocoder需要访问互联网,但不确定是否适合您。

答案 3 :(得分:-1)

定义位置的半径并计算onLocationChangeListener中当前位置的距离。如果距离小于半径,则设置布尔标志。当标志为假时执行您的操作。