如何通过谷歌地图API判断安卓设备是否接近某个地址

10

我正在开发一个接收给定地址的安卓应用程序。如果用户在该地址附近,或更接近该地址,我只想让应用程序在设备上运行。

这是否仅使用Google地图API就可以实现?


当用户尝试启动应用程序但不在您所期望的范围内时会发生什么? - Prmths
1
也许这个链接可以帮到你:https://dev59.com/pXA65IYBdhLWcg3wvxaE 。你需要比较两组坐标,并确定这两对坐标是否足够接近。 - Birb
@Prmths 应用程序根本无法打开 :) - Felipe Mosso
@Izmaki 谢谢!我一回家就会看看它。 - Felipe Mosso
2个回答

8
您可以获取地址并从中获取纬度和经度:
Geocoder coder = new Geocoder(this);
List<Address> address;

try {
    address = coder.getFromLocationName(strAddress,5);
    if (address == null) {
        return null;
    }
    Address location = address.get(0);
    location.getLatitude();
    location.getLongitude();


}

然后将其与您的位置进行比较:

if (distance(mylocation.latitude, mylocation.longitude,   location.getLatitude(), location.getLongitude()) < 0.1) { // if distance < 0.1

   //   launch the activity
}else {
   finish();
}


/** calculates the distance between two locations in MILES */
private double distance(double lat1, double lng1, double lat2, double lng2) {

    double earthRadius = 3958.75; // in miles, change to 6371 for kilometers

    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);

    double sindLat = Math.sin(dLat / 2);
    double sindLng = Math.sin(dLng / 2);

    double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
        * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));

    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

    double dist = earthRadius * c;

    return dist;
}

编辑: 正如@FelipeMosso所说,您也可以使用distanceBetween来计算两个位置之间的大致距离(以米为单位),或者使用distanceTo来获取您所在位置和目的地之间的距离。


谢谢 @Dyna!我会在回家后查看,然后给你反馈。 - Felipe Mosso
你的想法对我很有用!但是在此之前,我进行了一些搜索,并发现了一个名为distanceBetween的Android Location类方法,它可以完成与你的distance方法相同的功能。如果有人遇到同样的问题,我建议使用以下链接:http://developer.android.com/reference/android/location/Location.html - Felipe Mosso
好的@FelipeMosso。我会更新我的答案,以便我们可以帮助其他开发人员解决这个问题。干杯* - Dyna

2
GMSCore Locations API也有地理编码功能,可用于检测设备与一个或多个地理围栏位置的接近程度。您可以使用地图获取地址的纬度和经度。 这不会停止您的应用程序运行。更好的解决方案是启动应用程序,然后允许它进入后台。当用户穿过地理围栏时,弹出通知。当用户点击通知时,打开一个Activity。
请参阅创建和监控地理围栏

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接