2013-09-27 17 views
8

Belirli bir adresi alan bir Android uygulaması geliştiriyorum. Uygulamanın yalnızca cihazda çalıştırılmasına izin vermek istiyorum, kullanıcı bu adreste bulunuyorsa veya ona daha yakınsa.Bir Android cihazının adrese yakın olduğunu bilmek nasıl kullanılır? Google maps api

Bu yalnızca google maps api ile yapmak mümkün mü?

+0

Creating and Monitoring Geofences görüyor musunuz? – Prmths

+0

Belki bu size yardımcı olabilir: http://stackoverflow.com/questions/3652951/google-maps-api-get-coordinates-of-address. Temel olarak iki set koordinatı karşılaştırmanız ve eğer bu iki çiftin birbirlerine yeterince yakın olup olmadığını anlamanız gerekir. – Izmaki

+0

@Prmths uygulaması sadece açık değil :) –

cevap

6

Eğer adresi almak ve adrese gelen enlem ve boylam alabilir:

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


} 

Ve sonra konumu ile

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 karşılaştırmak: @FelipeMosso diyorduk Ayrıca, iki konum arasındaki metre mesafeyi veya distanceTo arasındaki mesafeyi hesaplayan distanceBetween'u da kullanabilirsiniz. hedefleme noktası:

+0

Teşekkür ederim @Dyna! Eve geldiğimde buna bir göz atacağım ve geri bildirim ile size geri döneceğim –

+0

Fikriniz benim için çalıştı! Ama ben daha önce biraz yanmış arama yaptım ve mesafe yöntemi ile aynı şeyi yaptığınız distanceBetween adlı bir Android yöntemi buldum. Aynı sorunla karşılaşan herhangi biri varsa, şunu kullanmanızı öneririm: http://developer.android.com/reference/android/location/Location.html –

+0

OK @FelipeMosso. Cevabımı bağlantı ile güncelleyeceğim, böylece diğer geliştiricilere bu konuda yardımcı olabiliriz. Alkış * – Dyna

2

GMSCore Locations API'sinin, aygıtın bir veya daha fazla Geofence konumuna olan yakınlığını algılamanıza olanak veren Geocoding özelliği de vardır. Bir adres için lat lng almak için Haritalar'ı kullanabilirsiniz.

Bu, uygulamanızın çalışmasını durdurmaz. Daha iyi bir çözüm, uygulamayı başlatmak ve daha sonra arka plana girmesine izin vermektir. Kullanıcı bir Geofence'ı geçtiğinde bir bildirim koyun. Kullanıcı bildirimi tıkladığında, bir Etkinlik oluşturun.

kullanıcının uygulamayı başlatmak için çalıştı ve istediğiniz aralıkta değildi zaman ne olacağını