2013-09-27 15 views
8

Sto sviluppando un'applicazione Android che riceve un determinato indirizzo. Vorrei solo far funzionare l'app sul dispositivo, se l'utente si trova su quell'indirizzo o più vicino ad esso.Come sapere se un dispositivo Android è vicino a un indirizzo google maps api

È possibile farlo solo con google maps api?

+0

Che cosa accadrebbe se un utente ha cercato di lanciare l'applicazione e non era all'interno della vostra gamma desiderata? – Prmths

+0

Forse questo potrebbe aiutarti: http://stackoverflow.com/questions/3652951/google-maps-api-get-coordinates-of-address. Fondamentalmente devi confrontare due serie di coordinate e capire se queste due coppie sono abbastanza vicine l'una all'altra. – Izmaki

+0

@Prmths semplicemente l'app non si apre :) –

risposta

6

si potrebbe ottenere l'indirizzo e per l'indirizzo ottenere la latitudine e la longitudine:

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


} 

E poi confrontarlo con la vostra posizione

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: Come diceva @FelipeMosso puoi anche utilizzare distanceBetween che calcola la distanza approssimativa in metri tra due posizioni o lo distanceTo che ti dà la distanza tra dove ti trovi e il destinazione ..

+0

Grazie @Dyna! Darò un'occhiata a questo quando torno a casa e torno a te con feedback –

+0

La tua idea ha funzionato per me! Ma ho cercato un bit accennato prima, e ho trovato un metodo Android di classe Location chiamato distanceBetween che fa lo stesso metodo di distanza. Se qualcuno incontra lo stesso problema, ti consiglio di utilizzare: http://developer.android.com/reference/android/location/Location.html –

+0

OK @FelipeMosso. Aggiornerò la mia risposta con il tuo link in modo da poter aiutare altri sviluppatori con questo problema. Saluti * – Dyna

2

L'API GMSCore Locations dispone inoltre di Geocoding, che consente di rilevare la vicinanza del dispositivo a una o più posizioni Geofence. Puoi usare Maps per ottenere il lat lng per un indirizzo.

Ciò non impedirà l'esecuzione della tua app. Una soluzione migliore è avviare l'app, quindi lasciarla andare in background. Quando l'utente attraversa un Geofence, invia una notifica. Quando l'utente fa clic sulla notifica, attiva un'attività.

Vedi Creating and Monitoring Geofences