2010-05-27 17 views
13

Ben mevcut en iyi sağlayıcıandroid olsun yeri

lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

locationListener = new MyLocationListener(); 
Criteria criteria = new Criteria(); 
criteria.setAccuracy(Criteria.ACCURACY_FINE); 
String provider = lm.getBestProvider(criteria, true); 
Location mostRecentLocation = lm.getLastKnownLocation(provider); 
if(mostRecentLocation != null) { 
    latid=mostRecentLocation.getLatitude(); 
    longid=mostRecentLocation.getLongitude(); 
} 
lm.requestLocationUpdates(provider, 1, 0, locationListener); 

almak için bu kodu ve ardından dinleyici

private class MyLocationListener implements LocationListener { 

@Override 
public void onLocationChanged(Location loc) { 
    if (loc != null) { 
    latid = loc.getLatitude(); 
    longid = loc.getLongitude(); 
    // if(loc.hasAccuracy()==true){ 
    accuracyd = loc.getAccuracy(); 
    String providershown = loc.getProvider();  
    accuracy.setText("Location Acquired. Accuracy:" 
     + Double.toString(accuracyd) + "m\nProvider: "+providershown); 
    accuracy.setBackgroundColor(Color.GREEN); 
    // } 
    userinfo=usernamevalue+"&"+Double.toString(latid)+"&"+Double.toString(longid); 
    submituserlocation(userinfo); 
    } 
} 

Bir cihaza test (htc magic) Ben gps devre dışı bırakıldığında hemen ağdan kilitlendiğini öğrendim. Gps'yi etkinleştirdiğimde ağdan herhangi bir veri almaz ve gps'den kilitlenene kadar bekler.
Konumumu belirlemek için ağı kullandıkları iyi bir gps sinyaline sahip olana kadar google haritalarındaki konumu kilitlemek isterim.
En iyi kriterler bunu yapsa da, yaptıkları şey bir kez sağlayıcı seçmektir.
Kodumda bir sorun var mı, yoksa yapmak için iş parçacığı ve zaman aşımları vb.

+0

spagi yardımcı olur. Bazı cihazlarda gps, bazı gsm, biraz wifi olabilir. –

+0

Burada çok ilginç bir Google makalesi var: http://developer.android.com/training/basics/location/currentlocation.html – shkschneider

cevap

14

Belli bir süre boyunca hem ağ sağlayıcısını hem de gps sağlayıcısını dinlemeyi deneyebilir ve sonra iki sonuçtan birini kontrol edebilirsiniz. Gps’ten sonuçlarınız yoksa, bunun yerine ağ sonuçlarını kullanın. Ben de öyle yaptım.

+0

Bu yüzden biri Gps için, biri de ağ için olmak üzere 2 konum dinleyicisi alıyorum ve bunları requestLocationUpdates ile her ikisine de başlatacağım. Onları sonra bir onLocationChanged ile dinleyebilir miyim? – spagi

+0

Evet ikisini de dinlemelisiniz. Herhangi bir sağlayıcıdan güncelleme gelmeden önce lastKnownLocation'ı bile kullanabilirsiniz. – Fedor

+1

MyLocationListener ürününüze bir Konum değişkeni ekleyebilir ve değerini onLocationChanged() içine ayarlayabilirsiniz. Ana etkinliğinizde, iki örneği MylocationListener oluşturun, biri gps içindir ve biri ağ sağlayıcısı içindir. Her ikisini de belirli bir süreden dinleyin (bunu bir zamanlayıcı iş parçacığı oluşturarak uygulayabilirsiniz) ve zaman dolduğunda, dinlemeyi durdurun ve varsa önce gpslistener'da yer değişkenini kontrol edin, eğer varsa, ağlistener'ı kontrol edin. – capecrawler

3

this other thread numaralı getBestProvider (Criteria criteria, boolean enabledOnly) ve LocationManager numaralı belgeleri kullanabilirsiniz. official documentation'a bakın. hiçbir yerde android dev sitede mümkün olan en iyi sağlayıcı krokisi açıkladı olan -

sizin kod beni çok yardımcı oldu