How to know if an Android device is near an address google maps api
You could get the address and from the address get the latitude and longitude:
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();
}
And then compare it with your location:
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;
}
EDIT: As @FelipeMosso was saying, you can also use distanceBetween that computes the approximate distance in meters between two locations or the distanceTo that gives you the distance between where you are at and the destination..
The GMSCore Locations API also has Geocoding, which allows you to detect the proximity of the device to one or more Geofence locations. You can use Maps to get the lat lng for an address.
This won't stop your app from running. A better solution is to start the app, then allow it to go into the background. When the user crosses a Geofence, put up a notification. When the user clicks the notification, bring up an Activity.
See Creating and Monitoring Geofences