Как узнать, находится ли Android-устройство рядом с адресом google maps api

Я разрабатываю приложение для Android, которое получает заданный адрес. Я хотел бы, чтобы приложение работало на устройстве только в том случае, если пользователь находится на этом адресе или ближе к нему.

Это возможно сделать только с api карт Google?


person Felipe Mosso    schedule 27.09.2013    source источник
comment
Что произойдет, если пользователь попытается запустить приложение и выйдет за пределы желаемого диапазона?   -  person Prmths    schedule 27.09.2013
comment
Возможно, это может вам помочь: stackoverflow .com / questions / 3652951 /. По сути, вам нужно сравнить два набора координат и выяснить, достаточно ли близки эти две пары друг к другу.   -  person Birb    schedule 27.09.2013
comment
@Prmths приложение просто не открывается :)   -  person Felipe Mosso    schedule 27.09.2013
comment
@Izmaki спасибо! я посмотрю на это, как только вернусь домой   -  person Felipe Mosso    schedule 27.09.2013


Ответы (2)


Вы можете получить адрес и по нему получить широту и долготу:

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, который показывает расстояние между тем местом, где вы находитесь, и пунктом назначения. ..

person Dyna    schedule 27.09.2013
comment
Спасибо, @Dyna! Я посмотрю на это, когда вернусь домой, и вернусь к вам с отзывами - person Felipe Mosso; 27.09.2013
comment
Ваша идея у меня сработала! Но я немного искал немного раньше и нашел Android-метод класса Location с именем distanceBetween, который делает то же самое, что и метод Distance. Если у кого-то возникнет такая же проблема, я рекомендую вам использовать: developer.android. ru / reference / android / location / Location.html - person Felipe Mosso; 30.09.2013
comment
ОК @FelipeMosso. Я дополню свой ответ вашей ссылкой, чтобы мы могли помочь другим разработчикам с этой проблемой. Ваше здоровье* - person Dyna; 30.09.2013

API местоположений GMSCore также имеет функцию геокодирования, которая позволяет определять близость устройства к одному или нескольким местоположениям геозоны. Вы можете использовать Карты, чтобы узнать широту и долготу адреса.

Это не остановит работу вашего приложения. Лучшее решение - запустить приложение, а затем позволить ему уйти в фоновый режим. Когда пользователь пересекает геозону, выставляйте уведомление. Когда пользователь щелкает уведомление, вызывает действие.

См. Создание и мониторинг геозон.

person Joe Malin    schedule 27.09.2013