Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to know if an Android device is near an address google maps api

I'm developing an Android application which receives a given address. I would like to only let the app run on the device, if the user is on that address, or closer to it.

Is that possible to do only with google maps api?

like image 520
Felipe Mosso Avatar asked Sep 27 '13 16:09

Felipe Mosso


2 Answers

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..

like image 196
Dyna Avatar answered Nov 14 '22 21:11

Dyna


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

like image 23
Joe Malin Avatar answered Nov 14 '22 21:11

Joe Malin