2013-09-27 10 views
8

Zajmuję się tworzeniem aplikacji dla systemu Android, która otrzymuje podany adres. Chciałbym pozwolić, aby aplikacja działała na urządzeniu, jeśli użytkownik znajduje się na tym lub bliżej niego.Jak sprawdzić, czy urządzenie z Androidem znajduje się w pobliżu adresu google maps api

Czy można to zrobić tylko za pomocą apletów map google?

+0

Co się stanie, gdy użytkownik próbował uruchomić aplikację i nie było w żądanym zakresie? – Prmths

+0

Może to może pomóc: http://stackoverflow.com/questions/3652951/google-maps-api-get-coordinates-of-address. Zasadniczo musisz porównać dwa zestawy współrzędnych i ustalić, czy te dwie pary są wystarczająco blisko siebie. – Izmaki

+0

@ Prima, aplikacja po prostu się nie otworzy :) –

Odpowiedz

6

można uzyskać adres z adresem i uzyskać szerokość i długość geograficzna:

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(); 


} 

, a następnie porównać je z umieszczeniem

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: Jak mówił @FelipeMosso możesz także użyć wartości distanceBetween, która oblicza przybliżoną odległość w metrach między dwiema lokalizacjami lub distanceTo, która daje odległość między miejscem, w którym się znajdujesz a destination ..

+0

Dziękuję @Dyna! Przyjrzę się temu, kiedy wrócę do domu i wrócę do ciebie z informacją zwrotną –

+0

Twój pomysł zadziałał! Ale wcześniej przeszukałem trochę i znalazłem metodę klasy Android o nazwie distanceBetween, która robi to samo co metoda odległości. Jeśli ktoś napotka na ten sam problem, polecam użycie: http://developer.android.com/reference/android/location/Location.html –

+0

OK @FelipeMosso. Zaktualizuję odpowiedź za pomocą Twojego linku, aby pomóc innym programistom z tym problemem. Pozdrawiam * – Dyna

2

Interfejs API GMSCore Locations ma również funkcję geokodowania, która pozwala wykrywać bliskość urządzenia do jednej lub więcej lokalizacji Geofence. Możesz użyć Map, aby uzyskać dostęp do adresu.

Nie spowoduje to zatrzymania działania aplikacji. Lepszym rozwiązaniem jest uruchomienie aplikacji, a następnie umożliwienie jej przejścia w tło. Gdy użytkownik przekroczy Geofence, umieść powiadomienie. Gdy użytkownik kliknie powiadomienie, wywołaj działanie.

Zobacz Creating and Monitoring Geofences

Powiązane problemy