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

How to restrict app usability to a certain geographical area ANDROID

我想定义一个地理边界,在该边界之外应用程序将拒绝运行。我已经知道如何用两个 lat/long 对绑定的正方形来做到这一点:

 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,但我怀疑这对这个问题真的很重要。

感谢您的帮助!

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

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

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

也许使用 Geocoder to extract city/state name based on the current location, this 答案可能会帮助你如何做到这一点。

因此,如果 city/state 名称不被允许,您将关闭应用程序并显示一条消息。

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

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

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

在多边形方法中使用点:

Point in Polygon Algorithm

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

虽然不能总是使用设计用于 x,y(笛卡尔)平面的公式,但它在这里也适用于球面经纬度坐标。