我正在开发一个接收给定地址的 Android 应用程序。我只想让应用程序在设备上运行,如果用户在那个地址上,或者更接近它。
这可能只用谷歌地图api吗?
我正在开发一个接收给定地址的 Android 应用程序。我只想让应用程序在设备上运行,如果用户在那个地址上,或者更接近它。
这可能只用谷歌地图api吗?
您可以获取地址并从地址获取纬度和经度:
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计算您所在位置与目的地之间的距离。
GMSCore Locations API 还具有地理编码功能,可让您检测设备与一个或多个地理围栏位置的接近程度。您可以使用地图获取地址的 lat lng。
这不会阻止您的应用程序运行。更好的解决方案是启动应用程序,然后让它进入后台。当用户越过地理围栏时,发出通知。当用户点击通知时,会弹出一个 Activity。
请参阅创建和监控地理围栏